From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <d.csapak@proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits))
 (No client certificate requested)
 by lists.proxmox.com (Postfix) with ESMTPS id 005F18160
 for <pve-devel@lists.proxmox.com>; Thu,  2 Mar 2023 11:28:50 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
 by firstgate.proxmox.com (Proxmox) with ESMTP id DA3D12748
 for <pve-devel@lists.proxmox.com>; Thu,  2 Mar 2023 11:28:19 +0100 (CET)
Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com
 [94.136.29.106])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by firstgate.proxmox.com (Proxmox) with ESMTPS
 for <pve-devel@lists.proxmox.com>; Thu,  2 Mar 2023 11:28:19 +0100 (CET)
Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1])
 by proxmox-new.maurer-it.com (Proxmox) with ESMTP id D8F32420AD
 for <pve-devel@lists.proxmox.com>; Thu,  2 Mar 2023 11:28:18 +0100 (CET)
Message-ID: <b6cbebb5-7c93-4ba9-dbf0-fe46a24eb57a@proxmox.com>
Date: Thu, 2 Mar 2023 11:28:17 +0100
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:110.0) Gecko/20100101
 Thunderbird/110.0
Content-Language: en-US
To: pve-devel@lists.proxmox.com
References: <20221028123322.93142-1-m.frank@proxmox.com>
 <20221028123322.93142-2-m.frank@proxmox.com>
From: Dominik Csapak <d.csapak@proxmox.com>
In-Reply-To: <20221028123322.93142-2-m.frank@proxmox.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.106 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment
 NICE_REPLY_A            -0.09 Looks like a legit reply (A)
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See
 http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more
 information. [pci.pm, qemuserver.pm]
Subject: Re: [pve-devel] [PATCH qemu-server v3 1/6] enable clipboard
 parameter in vga_fmt
X-BeenThere: pve-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
X-List-Received-Date: Thu, 02 Mar 2023 10:28:50 -0000

first:
sorry for the late review ;)

high level comments:

i know why you're adding it to the vga format, but maybe that's not the way
to go? we couple the console method with the display quite a lot, but
maybe we don't want to further increase that coupling?

(imho it would be much nicer to be able to define the console method/options
independently to the virtual display hardware)

any thoughts to that anyone?


On 10/28/22 14:33, Markus Frank wrote:
> added option to use the qemu vdagent implementation to enable the noVNC
> clipboard. When enabled with SPICE the spice-vdagent gets replaced with the qemu
> implementation.
> 
> This patch does not solve #1406, but does allow copy and paste with
> a running X-session, when spice-vdagent is installed on the guest.
> 
> Signed-off-by: Markus Frank <m.frank@proxmox.com>
> ---
>   PVE/QemuServer.pm     | 19 ++++++++++++++++++-
>   PVE/QemuServer/PCI.pm |  3 ++-
>   2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index c706653..333afc2 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -190,6 +190,12 @@ my $vga_fmt = {
>   	minimum => 4,
>   	maximum => 512,
>       },
> +    clipboard => {
> +	description => "enable clipboard (requires spice-vdagent)",
i'd expand/change that a bit, e.g. by saying it needs the spice tools
in the guest (spice-vdagent is rather linux specific)

> +	type => 'boolean',
> +	optional => 1,
> +	default => 0
> +    }
>   };
>   
>   my $ivshmem_fmt = {
> @@ -3836,6 +3842,13 @@ sub config_to_command {
>   	}
>       }
>   
> +    if ($vga->{clipboard} && $vga->{type} =~ /^std|^cirrus|^vmware/) {

that regex could be written as /^(std|cirrus|vmware)/, it's a bit clearer and
if one adds one, the chance to oversee/forget the '^' is mitigated

also, whats with serial ports? can it even work on that?

maybe it would be nicer to have some compatibility hash where we can simply
add the vga methods supported, and add it here only instead of in two places?
(just a thought, you don't have to go that way if it's not much better)

> +	push @$devices, '-chardev', 'qemu-vdagent,id=vdagent,name=vdagent,clipboard=on';
> +	my $pciaddr = print_pci_addr("clipboard", $bridges, $arch, $machine_type);
> +	push @$devices, '-device', "virtio-serial-pci$pciaddr";
> +	push @$devices, '-device', 'virtserialport,chardev=vdagent,name=com.redhat.spice.0';
> +    }
> +
>       my $rng = $conf->{rng0} ? parse_rng($conf->{rng0}) : undef;
>       if ($rng && $version_guard->(4, 1, 2)) {
>   	check_rng_source($rng->{source});
> @@ -3880,7 +3893,11 @@ sub config_to_command {
>   	die "failed to get an ip address of type $pfamily for 'localhost'\n" if !@nodeaddrs;
>   
>   	push @$devices, '-device', "virtio-serial,id=spice$pciaddr";
> -	push @$devices, '-chardev', "spicevmc,id=vdagent,name=vdagent";
> +	if ($vga->{clipboard}) {
> +	    push @$devices, '-chardev', 'qemu-vdagent,id=vdagent,name=vdagent,clipboard=on';

like i wrote above, we add it in two different places (that cannot happen together AFAICS)

it would be much nicer if we'd only have a single point in the code where we add that

> +	} else {
> +	    push @$devices, '-chardev', 'spicevmc,id=vdagent,name=vdagent';
> +	}
>   	push @$devices, '-device', "virtserialport,chardev=vdagent,name=com.redhat.spice.0";
>   
>   	my $localhost = PVE::Network::addr_to_ip($nodeaddrs[0]->{addr});
> diff --git a/PVE/QemuServer/PCI.pm b/PVE/QemuServer/PCI.pm
> index 3d0e70e..7ddabe0 100644
> --- a/PVE/QemuServer/PCI.pm
> +++ b/PVE/QemuServer/PCI.pm
> @@ -138,7 +138,8 @@ sub get_pci_addr_map {
>   	scsihw1 => { bus => 0, addr => 6 },
>   	ahci0 => { bus => 0, addr => 7 },
>   	qga0 => { bus => 0, addr => 8 },
> -	spice => { bus => 0, addr => 9 },
> +	spice => { bus => 0, addr => 9, conflict_ok => qw(clipboard) },
> +	clipboard => { bus => 0, addr => 9, conflict_ok => qw(spice) }, # clipboard is used if spice is not running
>   	virtio0 => { bus => 0, addr => 10 },
>   	virtio1 => { bus => 0, addr => 11 },
>   	virtio2 => { bus => 0, addr => 12 },