From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 ; 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 ; 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 ; 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 ; Thu, 2 Mar 2023 11:28:18 +0100 (CET) Message-ID: 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 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 > --- > 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 },