Signed-off-by: Wolfgang Bumiller <w.bumil...@proxmox.com>
---
Changes to v2:
  Improved description.
Changes from v1 to v2:
  Properly distinguish decimal vs hex.

 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..93dcc5e 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, either numeric (0 to disable 
entirely) or in traditional caret notation (eg. ^O).",
+               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.11.0


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to