]> git.proxmox.com Git - qemu-server.git/commitdiff
qm terminal: add --escape option
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Tue, 12 Dec 2017 08:54:08 +0000 (09:54 +0100)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Wed, 13 Dec 2017 13:52:28 +0000 (14:52 +0100)
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
PVE/CLI/qm.pm

index 90a44efd26f10666e434af589104a4afeb4bb790..7db65d36a737e71f832b34f6d422195a7014a298 100755 (executable)
@@ -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);