vncserver: YAML config spike
This commit is contained in:
@@ -30,6 +30,8 @@ use Time::HiRes qw (sleep);
|
|||||||
use Switch;
|
use Switch;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use YAML::Tiny;
|
use YAML::Tiny;
|
||||||
|
use List::Util qw(first);
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
use Hash::Merge::Simple;
|
use Hash::Merge::Simple;
|
||||||
|
|
||||||
@@ -43,7 +45,6 @@ CheckWeCanRunInThisEnvironment();
|
|||||||
|
|
||||||
DefineFilePathsAndStuff();
|
DefineFilePathsAndStuff();
|
||||||
LoadYAMLConfig();
|
LoadYAMLConfig();
|
||||||
exit;
|
|
||||||
|
|
||||||
ParseAndProcessCliOptions();
|
ParseAndProcessCliOptions();
|
||||||
|
|
||||||
@@ -972,6 +973,7 @@ sub ConstructXvncCmd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cmd .= SwallowedArgs();
|
$cmd .= SwallowedArgs();
|
||||||
|
$cmd .= ConvertConfigToXvncArgs();
|
||||||
|
|
||||||
$cmd .= " >> " . quotedString($desktopLog) . " 2>&1";
|
$cmd .= " >> " . quotedString($desktopLog) . " 2>&1";
|
||||||
|
|
||||||
@@ -1114,6 +1116,15 @@ sub DefineFilePathsAndStuff {
|
|||||||
chop($hostIP = `hostname -i`);
|
chop($hostIP = `hostname -i`);
|
||||||
|
|
||||||
DetectFontPath();
|
DetectFontPath();
|
||||||
|
|
||||||
|
%configToXvncArgsMap = ( interface => "-interface" );
|
||||||
|
$configToXvncArgsMap{dlp}{clipboard}{max_paste_size} = '-MaxCutText';
|
||||||
|
$configToXvncArgsMap{pointer}{allow_clicks_and_cursor_movement} =
|
||||||
|
'-AcceptPointerEvents';
|
||||||
|
|
||||||
|
%xvncArgsToConfigAliases = ();
|
||||||
|
$xvncArgsToConfigAliases{'-MaxCutText'} = [qw(dlp.clipboard.max_paste_size dlp.clipboard.delay)];
|
||||||
|
$xvncArgsToConfigAliases{'-httpd'} = [qw(httpd_directory)];
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ParseAndProcessCliOptions {
|
sub ParseAndProcessCliOptions {
|
||||||
@@ -1163,6 +1174,7 @@ sub EnsureAtLeastOneKasmUserExists {
|
|||||||
|
|
||||||
sub StartXvncOrExit {
|
sub StartXvncOrExit {
|
||||||
$cmd = ConstructXvncCmd();
|
$cmd = ConstructXvncCmd();
|
||||||
|
say $cmd;
|
||||||
|
|
||||||
DeleteLogLeftFromPreviousXvncRun();
|
DeleteLogLeftFromPreviousXvncRun();
|
||||||
StartXvncAndRecordPID();
|
StartXvncAndRecordPID();
|
||||||
@@ -1265,10 +1277,65 @@ sub LocalSelectDePath {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub LoadYAMLConfig {
|
sub LoadYAMLConfig {
|
||||||
|
if (! -f $vncDefaultsConfig) {
|
||||||
|
die "Couldn't load config: $vncDefaultsConfig";
|
||||||
|
}
|
||||||
|
|
||||||
my $defaultsConfig = YAML::Tiny->read($vncDefaultsConfig)->[0];
|
my $defaultsConfig = YAML::Tiny->read($vncDefaultsConfig)->[0];
|
||||||
my $systemConfig = YAML::Tiny->read($vncSystemConfig)->[0];
|
my $systemConfig = YAML::Tiny->read($vncSystemConfig)->[0];
|
||||||
my %mergedConfig = %{ Hash::Merge::Simple::merge($defaultsConfig, $systemConfig) };
|
%mergedConfig = %{ Hash::Merge::Simple::merge($defaultsConfig, $systemConfig) };
|
||||||
|
|
||||||
say $mergedConfig{framerate};
|
say $mergedConfig{framerate};
|
||||||
say $mergedConfig{dlp}{region}{x1};
|
say $mergedConfig{dlp}{region}{x1};
|
||||||
|
say ConvertConfigToXvncArgs();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ConvertConfigToXvncArgs {
|
||||||
|
# my $result = "";
|
||||||
|
|
||||||
|
foreach my $cliArg (keys %xvncArgsToConfigAliases) {
|
||||||
|
ComplementCliArgWithValue($cliArg);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
|
||||||
|
# $result .= " $key $value";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ComplementCliArgWithValue {
|
||||||
|
my $cliArg = $_[0];
|
||||||
|
|
||||||
|
my $firstDefinedConfigKey = FirstDefinedConfigKey($cliArg);
|
||||||
|
my $cliValue = ConfigValue($firstDefinedConfigKey);
|
||||||
|
if ($cliValue eq "default") {
|
||||||
|
say "default value for $cliArg, skipping";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
say "$cliArg $cliValue";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub FirstDefinedConfigKey {
|
||||||
|
my $cliArg = $_[0];
|
||||||
|
my @configAliases = @{ $xvncArgsToConfigAliases{$cliArg} };
|
||||||
|
|
||||||
|
first { ConfigValue($_) } @configAliases;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ConfigValue {
|
||||||
|
my $absoluteKey = $_[0];
|
||||||
|
my @keyParts = split(/\./, $absoluteKey);
|
||||||
|
my %configPart = %mergedConfig;
|
||||||
|
|
||||||
|
foreach my $keyPart (@keyParts) {
|
||||||
|
if (!defined($configPart{$keyPart})) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ref $configPart{$keyPart} eq "HASH") {
|
||||||
|
%configPart = % { $configPart{$keyPart} };
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $configPart{$keyPart};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
---
|
---
|
||||||
geometry: 1024x768
|
geometry: 1024x768
|
||||||
interface: 192.168.0.1
|
depth: 24
|
||||||
|
network:
|
||||||
|
interface: 0.0.0.0
|
||||||
|
use_ipv4: true
|
||||||
|
use_ipv6: true
|
||||||
|
httpd_directory: /usr/share/kasmvnc/www
|
||||||
|
display_title: default
|
||||||
|
password_file: ~/.kasmpasswd
|
||||||
framerate: 30
|
framerate: 30
|
||||||
dynamic_quality:
|
dynamic_quality:
|
||||||
min: 7
|
min: 7
|
||||||
@@ -16,10 +23,16 @@ dlp:
|
|||||||
y1: 10
|
y1: 10
|
||||||
allow_click: false
|
allow_click: false
|
||||||
clipboard:
|
clipboard:
|
||||||
|
max_paste_size: 262144
|
||||||
send_max: 10000
|
send_max: 10000
|
||||||
accept_max: 10000
|
accept_max: 10000
|
||||||
delay: 1000
|
delay: 1000
|
||||||
keyboard:
|
keyboard:
|
||||||
ratelimit: 30
|
ratelimit: 30
|
||||||
logging:
|
|
||||||
level: verbose
|
# Mouse, trackpad, etc.
|
||||||
|
pointer:
|
||||||
|
allow_clicks_and_cursor_movement: false
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level: verbose
|
||||||
|
|||||||
Reference in New Issue
Block a user