From aa320bcd16293fe8465112e207029b493e42e86f Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Tue, 12 Dec 2017 09:54:08 +0100 Subject: [PATCH] qm terminal: add --escape option Signed-off-by: Wolfgang Bumiller Reviewed-by: Dominik Csapak --- PVE/CLI/qm.pm | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm index 90a44ef..7db65d3 100755 --- a/PVE/CLI/qm.pm +++ b/PVE/CLI/qm.pm @@ -471,7 +471,13 @@ __PACKAGE__->register_method ({ type => 'string', optional => 1, enum => [qw(serial0 serial1 serial2 serial3)], - } + }, + escape => { + description => "Escape character.", + type => 'string', + optional => 1, + default => '^O', + }, }, }, returns => { type => 'null'}, @@ -480,6 +486,24 @@ __PACKAGE__->register_method ({ my $vmid = $param->{vmid}; + my $escape = $param->{escape} // '^O'; + if ($escape =~ /^\^([\x40-\x7a])$/) { + $escape = ord($1) & 0x1F; + } elsif ($escape =~ /^0x[0-9a-f]+$/i) { + $escape = hex($escape); + } elsif ($escape =~ /^[0-9]+$/) { + $escape = int($escape); + } else { + die "invalid escape character definition: $escape\n"; + } + my $escapemsg = ''; + if ($escape) { + $escapemsg = sprintf(' (press Ctrl+%c to exit)', $escape+0x40); + $escape = sprintf(',escape=0x%x', $escape); + } else { + $escape = ''; + } + my $conf = PVE::QemuConfig->load_config ($vmid); # check if VM exists my $iface = $param->{iface}; @@ -501,9 +525,9 @@ __PACKAGE__->register_method ({ my $socket = "/var/run/qemu-server/${vmid}.$iface"; - my $cmd = "socat UNIX-CONNECT:$socket STDIO,raw,echo=0,escape=0x0f"; + my $cmd = "socat UNIX-CONNECT:$socket STDIO,raw,echo=0$escape"; - print "starting serial terminal on interface $iface (press control-O to exit)\n"; + print "starting serial terminal on interface ${iface}${escapemsg}\n"; system($cmd); -- 2.39.2