[pve-devel] [PATCH qemu-server 1/2] qm terminal: add --escape option

Wolfgang Bumiller w.bumiller at proxmox.com
Tue Dec 12 10:00:57 CET 2017


Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
 PVE/CLI/qm.pm | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm
index 90a44ef..f69ec33 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,23 @@ __PACKAGE__->register_method ({
 
 	my $vmid = $param->{vmid};
 
+	my $escape = $param->{escape} // '^O';
+	if ($escape =~ /^\^([\x40-\x7a])$/) {
+	    # Holding ctrl is like masking out the top two bitw
+	    $escape = ord(uc($1)) & 0x1F;
+	} elsif ($escape =~ /^(?:0x[0-9a-f]|[0-9]+)$/i) {
+	    $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 +524,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.11.0





More information about the pve-devel mailing list