vncserver: YAML config spike

KASM-1810_yaml_config
Dmitry Maksyoma 4 years ago
parent 11d3958702
commit 42021dd29a

@ -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
# Mouse, trackpad, etc.
pointer:
allow_clicks_and_cursor_movement: false
logging: logging:
level: verbose level: verbose

Loading…
Cancel
Save