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

Dominik Csapak d.csapak at proxmox.com
Wed Dec 13 12:44:22 CET 2017


Reviewed-By: Dominik Csapak <d.csapak at proxmox.com>
On 12/12/2017 10:57 AM, Wolfgang Bumiller wrote:
> 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);
>   
> 





More information about the pve-devel mailing list