[pve-devel] [PATCH v3 qemu-server 1/2] qm terminal: add --escape option
Wolfgang Bumiller
w.bumiller at proxmox.com
Tue Dec 12 10:57:47 CET 2017
Signed-off-by: Wolfgang Bumiller <w.bumiller at 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
More information about the pve-devel
mailing list