From 42021dd29a455cfbd1ad4ed41b02412fdcde46b6 Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Tue, 2 Nov 2021 19:51:01 +1300 Subject: [PATCH] vncserver: YAML config spike --- unix/vncserver | 71 +++++++++++++++++++++++++++++++++++- unix/vncserver_defaults.yaml | 19 ++++++++-- 2 files changed, 85 insertions(+), 5 deletions(-) diff --git a/unix/vncserver b/unix/vncserver index c02a567..18a8d88 100755 --- a/unix/vncserver +++ b/unix/vncserver @@ -30,6 +30,8 @@ use Time::HiRes qw (sleep); use Switch; use File::Basename; use YAML::Tiny; +use List::Util qw(first); +use Data::Dumper; use Hash::Merge::Simple; @@ -43,7 +45,6 @@ CheckWeCanRunInThisEnvironment(); DefineFilePathsAndStuff(); LoadYAMLConfig(); -exit; ParseAndProcessCliOptions(); @@ -972,6 +973,7 @@ sub ConstructXvncCmd { } $cmd .= SwallowedArgs(); + $cmd .= ConvertConfigToXvncArgs(); $cmd .= " >> " . quotedString($desktopLog) . " 2>&1"; @@ -1114,6 +1116,15 @@ sub DefineFilePathsAndStuff { chop($hostIP = `hostname -i`); 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 { @@ -1163,6 +1174,7 @@ sub EnsureAtLeastOneKasmUserExists { sub StartXvncOrExit { $cmd = ConstructXvncCmd(); + say $cmd; DeleteLogLeftFromPreviousXvncRun(); StartXvncAndRecordPID(); @@ -1265,10 +1277,65 @@ sub LocalSelectDePath { } sub LoadYAMLConfig { + if (! -f $vncDefaultsConfig) { + die "Couldn't load config: $vncDefaultsConfig"; + } + my $defaultsConfig = YAML::Tiny->read($vncDefaultsConfig)->[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{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}; + } } diff --git a/unix/vncserver_defaults.yaml b/unix/vncserver_defaults.yaml index aaa5df9..ed3794d 100644 --- a/unix/vncserver_defaults.yaml +++ b/unix/vncserver_defaults.yaml @@ -1,6 +1,13 @@ --- 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 dynamic_quality: min: 7 @@ -16,10 +23,16 @@ dlp: y1: 10 allow_click: false clipboard: + max_paste_size: 262144 send_max: 10000 accept_max: 10000 delay: 1000 keyboard: ratelimit: 30 - logging: - level: verbose + +# Mouse, trackpad, etc. +pointer: + allow_clicks_and_cursor_movement: false + +logging: + level: verbose