public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard
@ 2023-08-24  8:03 Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Markus Frank @ 2023-08-24  8:03 UTC (permalink / raw)
  To: pve-devel

qemu-server:

changes v10:
* separated "vnc-clipboard return at status/current" to its own patch
* added missing trailing comma
* changed capitalization

changes v8:
* removed unnecessary conditions
* removed spicedevices variable and changed back to devices
* created is_spice variable

changes v6:
* added check if vga->type is set to prevent error when using default display
* renamed clipboard to vnc_clipboard

changes v5:
* removed return of regex check in the assertion-function for the clipboard config
* moved clipboard code into spice-if-block

changes v4:
* removed duplicate code and created a spicedevices variable to store
spice/vdagent devices.
* clipboard_check_compatibility function

changes v3:
* added hint to make clearer that the spice guest tools are required for
 the noVNC-clipboard
* Checkbox changes to ComboBox when a spice device is selected to make
 clear that only one clipboard can be used at a time.
* added 2 test-cases

changes v2:
* added pci address to virtio-serial-pci

Markus Frank (3):
  enable VNC clipboard parameter in vga_fmt
  add vnc-clipboard variable to return at status/current
  test cases for clipboard spice & std

 PVE/API2/Qemu.pm                          | 13 +++++
 PVE/QemuServer.pm                         | 61 ++++++++++++++++-------
 test/cfg2cmd/VNC-clipboard-spice.conf     |  1 +
 test/cfg2cmd/VNC-clipboard-spice.conf.cmd | 27 ++++++++++
 test/cfg2cmd/VNC-clipboard-std.conf       |  1 +
 test/cfg2cmd/VNC-clipboard-std.conf.cmd   | 27 ++++++++++
 6 files changed, 112 insertions(+), 18 deletions(-)
 create mode 100644 test/cfg2cmd/VNC-clipboard-spice.conf
 create mode 100644 test/cfg2cmd/VNC-clipboard-spice.conf.cmd
 create mode 100644 test/cfg2cmd/VNC-clipboard-std.conf
 create mode 100644 test/cfg2cmd/VNC-clipboard-std.conf.cmd


novnc-pve:

Markus Frank (1):
  add "show clipboard button" patch to series

 .../patches/0019-show-clipboard-button.patch  | 30 +++++++++++++++++++
 debian/patches/series                         |  1 +
 2 files changed, 31 insertions(+)
 create mode 100644 debian/patches/0019-show-clipboard-button.patch


pve-manager:

change v7:
* fixed the empty Display Bug in VGA options found by Friedrich
 (it should be "Default" instead of empty) 

changes v6:
* Changed onGetValues in DisplayEdit to only set the saved vnc_clipboard
variable, so it's possible to reset type and memory to default values

changes v4:
* moved clipboard option from Display settings in Hardware to Options

Markus Frank (1):
  add clipboard checkbox to VM Options

 www/manager6/qemu/DisplayEdit.js |  8 +++++++
 www/manager6/qemu/Options.js     | 37 ++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)


pve-docs:

changes v4:
* rewrote entire Text
* added command example to set clipboard to 1

Markus Frank (1):
  add noVNC clipboard documentation

 qm.adoc | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

-- 
2.39.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt
  2023-08-24  8:03 [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard Markus Frank
@ 2023-08-24  8:03 ` Markus Frank
  2023-09-07  9:35   ` Thomas Lamprecht
  2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 3/6] test cases for clipboard spice & std Markus Frank
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Markus Frank @ 2023-08-24  8:03 UTC (permalink / raw)
  To: pve-devel

added option to use the qemu vdagent implementation to enable the VNC
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/API2/Qemu.pm  |  7 ++++++
 PVE/QemuServer.pm | 61 +++++++++++++++++++++++++++++++++--------------
 2 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 9606e72..6341402 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -1034,6 +1034,9 @@ __PACKAGE__->register_method({
 			$conf->{boot} = PVE::QemuServer::print_bootorder($devs);
 		    }
 
+		    my $vga = PVE::QemuServer::parse_vga($conf->{vga});
+		    PVE::QemuServer::assert_vnc_clipboard_config($vga);
+
 		    # auto generate uuid if user did not specify smbios1 option
 		    if (!$conf->{smbios1}) {
 			$conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid();
@@ -1856,6 +1859,10 @@ my $update_vm_api  = sub {
 			die "only root can modify '$opt' config for real devices\n";
 		    }
 		    $conf->{pending}->{$opt} = $param->{$opt};
+		} elsif ($opt eq 'vga') {
+		    my $vga = PVE::QemuServer::parse_vga($param->{$opt});
+		    PVE::QemuServer::assert_vnc_clipboard_config($vga);
+		    $conf->{pending}->{$opt} = $param->{$opt};
 		} elsif ($opt =~ m/^usb\d+/) {
 		    if (my $olddevice = $conf->{$opt}) {
 			check_usb_perm($rpcenv, $authuser, $vmid, undef, $opt, $conf->{$opt});
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index bf1de17..9dc6e3c 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -195,8 +195,17 @@ my $vga_fmt = {
 	minimum => 4,
 	maximum => 512,
     },
+    'vnc-clipboard' => {
+	description => "enable VNC clipboard (requires SPICE guest tools/"
+	    ."SPICE vdagent installed on the guest OS).",
+	type => 'boolean',
+	optional => 1,
+	default => 0,
+    },
 };
 
+my $vnc_clipboard_regex = qr/^(std|cirrus|vmware|virtio|qxl)/;
+
 my $ivshmem_fmt = {
     size => {
 	type => 'integer',
@@ -1375,6 +1384,14 @@ sub pve_verify_hotplug_features {
     die "unable to parse hotplug option\n";
 }
 
+sub assert_vnc_clipboard_config {
+    my ($vga) = @_;
+
+    if ($vga->{'vnc-clipboard'} && $vga->{type} && $vga->{type} !~ $vnc_clipboard_regex) {
+	die "vga type $vga->{type} is not compatible with VNC clipboard\n";
+    }
+}
+
 sub scsi_inquiry {
     my($fh, $noerr) = @_;
 
@@ -3945,7 +3962,10 @@ sub config_to_command {
 
     my $spice_port;
 
-    if ($qxlnum || $vga->{type} =~ /^virtio/) {
+    assert_vnc_clipboard_config($vga);
+    my $is_spice = $qxlnum || $vga->{type} =~ /^virtio/;
+
+    if ($is_spice || $vga->{'vnc-clipboard'}) {
 	if ($qxlnum > 1) {
 	    if ($winversion){
 		for (my $i = 1; $i < $qxlnum; $i++){
@@ -3966,29 +3986,34 @@ sub config_to_command {
 
 	my $pciaddr = print_pci_addr("spice", $bridges, $arch, $machine_type);
 
-	my $pfamily = PVE::Tools::get_host_address_family($nodename);
-	my @nodeaddrs = PVE::Tools::getaddrinfo_all('localhost', family => $pfamily);
-	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->{'vnc-clipboard'}) {
+	    push @$devices, '-chardev', 'qemu-vdagent,id=vdagent,name=vdagent,clipboard=on';
+	} 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});
-	$spice_port = PVE::Tools::next_spice_port($pfamily, $localhost);
+	if ($is_spice) {
+	    my $pfamily = PVE::Tools::get_host_address_family($nodename);
+	    my @nodeaddrs = PVE::Tools::getaddrinfo_all('localhost', family => $pfamily);
+	    die "failed to get an ip address of type $pfamily for 'localhost'\n" if !@nodeaddrs;
 
-	my $spice_enhancement_str = $conf->{spice_enhancements} // '';
-	my $spice_enhancement = parse_property_string($spice_enhancements_fmt, $spice_enhancement_str);
-	if ($spice_enhancement->{foldersharing}) {
-	    push @$devices, '-chardev', "spiceport,id=foldershare,name=org.spice-space.webdav.0";
-	    push @$devices, '-device', "virtserialport,chardev=foldershare,name=org.spice-space.webdav.0";
-	}
+	    my $localhost = PVE::Network::addr_to_ip($nodeaddrs[0]->{addr});
+	    $spice_port = PVE::Tools::next_spice_port($pfamily, $localhost);
 
-	my $spice_opts = "tls-port=${spice_port},addr=$localhost,tls-ciphers=HIGH,seamless-migration=on";
-	$spice_opts .= ",streaming-video=$spice_enhancement->{videostreaming}"
-	    if $spice_enhancement->{videostreaming};
+	    my $spice_enhancement_str = $conf->{spice_enhancements} // '';
+	    my $spice_enhancement = parse_property_string($spice_enhancements_fmt, $spice_enhancement_str);
+	    if ($spice_enhancement->{foldersharing}) {
+		push @$devices, '-chardev', "spiceport,id=foldershare,name=org.spice-space.webdav.0";
+		push @$devices, '-device', "virtserialport,chardev=foldershare,name=org.spice-space.webdav.0";
+	    }
 
-	push @$devices, '-spice', "$spice_opts";
+	    my $spice_opts = "tls-port=${spice_port},addr=$localhost,tls-ciphers=HIGH,seamless-migration=on";
+	    $spice_opts .= ",streaming-video=$spice_enhancement->{videostreaming}"
+		if $spice_enhancement->{videostreaming};
+	    push @$devices, '-spice', "$spice_opts";
+	}
     }
 
     # enable balloon by default, unless explicitly disabled
-- 
2.39.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH qemu-server v10 3/6] test cases for clipboard spice & std
  2023-08-24  8:03 [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
@ 2023-08-24  8:03 ` Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH novnc v10 4/6] add "show clipboard button" patch to series Markus Frank
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-08-24  8:03 UTC (permalink / raw)
  To: pve-devel

added one test case for a spice display and one for std

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
 test/cfg2cmd/VNC-clipboard-spice.conf     |  1 +
 test/cfg2cmd/VNC-clipboard-spice.conf.cmd | 27 +++++++++++++++++++++++
 test/cfg2cmd/VNC-clipboard-std.conf       |  1 +
 test/cfg2cmd/VNC-clipboard-std.conf.cmd   | 27 +++++++++++++++++++++++
 4 files changed, 56 insertions(+)
 create mode 100644 test/cfg2cmd/VNC-clipboard-spice.conf
 create mode 100644 test/cfg2cmd/VNC-clipboard-spice.conf.cmd
 create mode 100644 test/cfg2cmd/VNC-clipboard-std.conf
 create mode 100644 test/cfg2cmd/VNC-clipboard-std.conf.cmd

diff --git a/test/cfg2cmd/VNC-clipboard-spice.conf b/test/cfg2cmd/VNC-clipboard-spice.conf
new file mode 100644
index 0000000..bd58818
--- /dev/null
+++ b/test/cfg2cmd/VNC-clipboard-spice.conf
@@ -0,0 +1 @@
+vga: qxl,vnc-clipboard=1
diff --git a/test/cfg2cmd/VNC-clipboard-spice.conf.cmd b/test/cfg2cmd/VNC-clipboard-spice.conf.cmd
new file mode 100644
index 0000000..f24cc7f
--- /dev/null
+++ b/test/cfg2cmd/VNC-clipboard-spice.conf.cmd
@@ -0,0 +1,27 @@
+/usr/bin/kvm \
+  -id 8006 \
+  -name 'vm8006,debug-threads=on' \
+  -no-shutdown \
+  -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+  -mon 'chardev=qmp,mode=control' \
+  -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
+  -mon 'chardev=qmp-event,mode=control' \
+  -pidfile /var/run/qemu-server/8006.pid \
+  -daemonize \
+  -smp '1,sockets=1,cores=1,maxcpus=1' \
+  -nodefaults \
+  -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+  -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+  -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
+  -m 512 \
+  -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
+  -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
+  -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
+  -device 'qxl-vga,id=vga,max_outputs=4,bus=pci.0,addr=0x2' \
+  -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
+  -chardev 'qemu-vdagent,id=vdagent,name=vdagent,clipboard=on' \
+  -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
+  -spice 'tls-port=61000,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
+  -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
+  -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+  -machine 'type=pc+pve0'
diff --git a/test/cfg2cmd/VNC-clipboard-std.conf b/test/cfg2cmd/VNC-clipboard-std.conf
new file mode 100644
index 0000000..fb788b5
--- /dev/null
+++ b/test/cfg2cmd/VNC-clipboard-std.conf
@@ -0,0 +1 @@
+vga: std,vnc-clipboard=1
diff --git a/test/cfg2cmd/VNC-clipboard-std.conf.cmd b/test/cfg2cmd/VNC-clipboard-std.conf.cmd
new file mode 100644
index 0000000..c0c6cd2
--- /dev/null
+++ b/test/cfg2cmd/VNC-clipboard-std.conf.cmd
@@ -0,0 +1,27 @@
+/usr/bin/kvm \
+  -id 8006 \
+  -name 'vm8006,debug-threads=on' \
+  -no-shutdown \
+  -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+  -mon 'chardev=qmp,mode=control' \
+  -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
+  -mon 'chardev=qmp-event,mode=control' \
+  -pidfile /var/run/qemu-server/8006.pid \
+  -daemonize \
+  -smp '1,sockets=1,cores=1,maxcpus=1' \
+  -nodefaults \
+  -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+  -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+  -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
+  -m 512 \
+  -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
+  -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
+  -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
+  -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \
+  -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
+  -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
+  -chardev 'qemu-vdagent,id=vdagent,name=vdagent,clipboard=on' \
+  -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
+  -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
+  -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+  -machine 'type=pc+pve0'
-- 
2.39.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH novnc v10 4/6] add "show clipboard button" patch to series
  2023-08-24  8:03 [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 3/6] test cases for clipboard spice & std Markus Frank
@ 2023-08-24  8:03 ` Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH manager v10 5/6] add clipboard checkbox to VM Options Markus Frank
  2023-08-24  8:03 ` [pve-devel] [PATCH docs v10 6/6] add noVNC clipboard documentation Markus Frank
  4 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-08-24  8:03 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
 .../patches/0019-show-clipboard-button.patch  | 30 +++++++++++++++++++
 debian/patches/series                         |  1 +
 2 files changed, 31 insertions(+)
 create mode 100644 debian/patches/0019-show-clipboard-button.patch

diff --git a/debian/patches/0019-show-clipboard-button.patch b/debian/patches/0019-show-clipboard-button.patch
new file mode 100644
index 0000000..7f7202f
--- /dev/null
+++ b/debian/patches/0019-show-clipboard-button.patch
@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Markus Frank <m.frank@proxmox.com>
+Date: Fri, 28 Oct 2022 13:57:57 +0200
+Subject: [PATCH] show clipboard button
+
+show button when vnc-clipboard at status/current is true
+
+Signed-off-by: Markus Frank <m.frank@proxmox.com>
+---
+ app/pve.js | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/app/pve.js b/app/pve.js
+index 287615f..a2e54b0 100644
+--- a/app/pve.js
++++ b/app/pve.js
+@@ -411,6 +411,10 @@ PVEUI.prototype = {
+ 			document.getElementById('pve_start_dlg')
+ 			    .classList.add("noVNC_open");
+ 		    }
++		    if (result.data['vnc-clipboard']) {
++			document.getElementById('noVNC_clipboard_button')
++			    .classList.remove('pve_hidden');
++		    }
+ 		},
+ 		failure: function(msg, code) {
+ 		    if (code === 403) {
+-- 
+2.30.2
+
diff --git a/debian/patches/series b/debian/patches/series
index 085e2b4..212add7 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -16,3 +16,4 @@
 0016-hide-fullscreen-button-on-isFullscreen-get-variable.patch
 0017-make-error-hideable.patch
 0018-show-start-button-on-not-running-vm-ct.patch
+0019-show-clipboard-button.patch
-- 
2.39.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH manager v10 5/6] add clipboard checkbox to VM Options
  2023-08-24  8:03 [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard Markus Frank
                   ` (2 preceding siblings ...)
  2023-08-24  8:03 ` [pve-devel] [PATCH novnc v10 4/6] add "show clipboard button" patch to series Markus Frank
@ 2023-08-24  8:03 ` Markus Frank
  2023-09-07  9:38   ` Thomas Lamprecht
  2023-08-24  8:03 ` [pve-devel] [PATCH docs v10 6/6] add noVNC clipboard documentation Markus Frank
  4 siblings, 1 reply; 8+ messages in thread
From: Markus Frank @ 2023-08-24  8:03 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
 www/manager6/qemu/DisplayEdit.js |  8 +++++++
 www/manager6/qemu/Options.js     | 37 ++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js
index 9bb1763e..5ba0a512 100644
--- a/www/manager6/qemu/DisplayEdit.js
+++ b/www/manager6/qemu/DisplayEdit.js
@@ -4,6 +4,9 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
     onlineHelp: 'qm_display',
 
     onGetValues: function(values) {
+	if (typeof this.originalConfig['vnc-clipboard'] !== 'undefined') {
+	    values['vnc-clipboard'] = this.originalConfig['vnc-clipboard'];
+	}
 	let ret = PVE.Parser.printPropertyString(values, 'type');
 	if (ret === '') {
 	    return { 'delete': 'vga' };
@@ -11,6 +14,11 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
 	return { vga: ret };
     },
 
+    onSetValues: function(values) {
+	this.originalConfig = values;
+	return values;
+    },
+
     items: [{
 	name: 'type',
 	xtype: 'proxmoxKVComboBox',
diff --git a/www/manager6/qemu/Options.js b/www/manager6/qemu/Options.js
index 7b112400..6b5c868b 100644
--- a/www/manager6/qemu/Options.js
+++ b/www/manager6/qemu/Options.js
@@ -154,6 +154,43 @@ Ext.define('PVE.qemu.Options', {
 		    },
 		} : undefined,
 	    },
+	    vga: {
+		header: gettext('Use VNC clipboard'),
+		defaultValue: false,
+		renderer: function(value) {
+		    let vga = PVE.Parser.parsePropertyString(value, 'type');
+		    return vga['vnc-clipboard'] ? Proxmox.Utils.yesText : Proxmox.Utils.noText;
+		},
+		editor: caps.vms['VM.Config.HWType'] ? {
+		    xtype: 'proxmoxWindowEdit',
+		    subject: gettext('Use VNC clipboard'),
+		    onlineHelp: 'qm_display',
+		    items: {
+			xtype: 'pveDisplayInputPanel',
+			items: {
+			    xtype: 'proxmoxcheckbox',
+			    name: 'vnc-clipboard',
+			    uncheckedValue: 0,
+			    defaultValue: 0,
+			    itemId: 'clipboardBox',
+			    fieldLabel: gettext('Enabled'),
+			},
+			onGetValues: function(values) {
+			    values = Ext.apply(this.originalConfig, values);
+			    PVE.Utils.delete_if_default(values, 'vnc-clipboard', 0, 1);
+			    let ret = PVE.Parser.printPropertyString(values, 'type');
+			    if (ret === '') {
+				return { 'delete': 'vga' };
+			    }
+			    return { vga: ret };
+			},
+			onSetValues: function(values) {
+			    this.originalConfig = PVE.Parser.parsePropertyString(values.vga, 'type');
+			    return this.originalConfig;
+			},
+		    },
+		} : undefined,
+	    },
 	    hotplug: {
 		header: gettext('Hotplug'),
 		defaultValue: 'disk,network,usb',
-- 
2.39.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH docs v10 6/6] add noVNC clipboard documentation
  2023-08-24  8:03 [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard Markus Frank
                   ` (3 preceding siblings ...)
  2023-08-24  8:03 ` [pve-devel] [PATCH manager v10 5/6] add clipboard checkbox to VM Options Markus Frank
@ 2023-08-24  8:03 ` Markus Frank
  4 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-08-24  8:03 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
 qm.adoc | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/qm.adoc b/qm.adoc
index b3c3034..0414531 100644
--- a/qm.adoc
+++ b/qm.adoc
@@ -776,6 +776,24 @@ Selecting `serialX` as display 'type' disables the VGA output, and redirects
 the Web Console to the selected serial port. A configured display 'memory'
 setting will be ignored in that case.
 
+.VNC clipboard
+You can enable the VNC clipboard by setting `vnc-clipboard` to 1.
+
+----
+# qm set <vmid> -vga <displaytype>,vnc-clipboard=1
+----
+
+In order to use the clipboard feature, you must first install the
+SPICE guest tools. On Debian-based distributions, this can be achieved
+by installing `spice-vdagent`. For other Operating Systems search for it
+in the offical repositories or see: https://www.spice-space.org/download.html
+
+Once you have installed the spice guest tools, you can use the VNC clipboard
+function (e.g. in the noVNC console panel). However, if you're using
+SPICE, virtio or virgl, you'll need to choose which clipboard to use.
+This is because the default *SPICE* clipboard will be replaced by the
+*VNC* clipboard, if `vnc-clipboard` is set to 1.
+
 [[qm_usb_passthrough]]
 USB Passthrough
 ~~~~~~~~~~~~~~~
-- 
2.39.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt
  2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
@ 2023-09-07  9:35   ` Thomas Lamprecht
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Lamprecht @ 2023-09-07  9:35 UTC (permalink / raw)
  To: Proxmox VE development discussion, Markus Frank

Am 24/08/2023 um 10:03 schrieb Markus Frank:
> added option to use the qemu vdagent implementation to enable the VNC
> 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/API2/Qemu.pm  |  7 ++++++
>  PVE/QemuServer.pm | 61 +++++++++++++++++++++++++++++++++--------------
>  2 files changed, 50 insertions(+), 18 deletions(-)
> 

> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index bf1de17..9dc6e3c 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -195,8 +195,17 @@ my $vga_fmt = {
>  	minimum => 4,
>  	maximum => 512,
>      },
> +    'vnc-clipboard' => {
> +	description => "enable VNC clipboard (requires SPICE guest tools/"
> +	    ."SPICE vdagent installed on the guest OS).",
> +	type => 'boolean',
> +	optional => 1,
> +	default => 0,


I was about to apply this, but when replying to the UI patch I started to
question the boolean approach, especially w.r.t. that we might want to
decouple the chosen "display" and the added SPÌCE channel & features in
the future, so that one can explicitily add SPICE for any display type,
if wanted.

With that in mind it might be slightly more future proof if we use a
enum for the clipoard value, for now it would probably look something
like:

clipboard => {
    description => 'Enable a specific clipboard. If not set, depending on'
        .' the display type the SPICE one will be added.',
    type => 'string',
    enum => ['vnc'],
    optional => 1,
}

it might make sense to add the non-existing part explicitly already now,
e.g., by some 'auto' value in the enum, but no hard feelings here.


The current status API should then be changed accordingly to return a
"clipboard" key with the respective value, if set.

> +    },
>  };
>  
> +my $vnc_clipboard_regex = qr/^(std|cirrus|vmware|virtio|qxl)/;

I'd declare that inline in the "assert_vnc_clipboard_config" directly  as long
as it's not used by other helpers.


> +
>  my $ivshmem_fmt = {
>      size => {
>  	type => 'integer',
> @@ -1375,6 +1384,14 @@ sub pve_verify_hotplug_features {
>      die "unable to parse hotplug option\n";
>  }
>  
> +sub assert_vnc_clipboard_config {
> +    my ($vga) = @_;
> +
> +    if ($vga->{'vnc-clipboard'} && $vga->{type} && $vga->{type} !~ $vnc_clipboard_regex) {
> +	die "vga type $vga->{type} is not compatible with VNC clipboard\n";
> +    }
> +}
> +






^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH manager v10 5/6] add clipboard checkbox to VM Options
  2023-08-24  8:03 ` [pve-devel] [PATCH manager v10 5/6] add clipboard checkbox to VM Options Markus Frank
@ 2023-09-07  9:38   ` Thomas Lamprecht
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Lamprecht @ 2023-09-07  9:38 UTC (permalink / raw)
  To: Proxmox VE development discussion, Markus Frank

Am 24/08/2023 um 10:03 schrieb Markus Frank:
> Signed-off-by: Markus Frank <m.frank@proxmox.com>

As mentioned off-list: a hint to the UI that spice clipboard doesn't
work any more if the VNC one is enabled would be great to have in the UI
too.

If the boolean is changed to an enumeration a radio-group (e.g., similar in
style like we have in the CT restore window for  "privileged") or combobox
can add more clarity already on its own by offering a dedicated "Auto (Spice)"
and "VNC" choice.




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-09-07  9:38 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-24  8:03 [pve-devel] [PATCH qemu-server v10 0/6] Feature VNC-Clipboard Markus Frank
2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
2023-09-07  9:35   ` Thomas Lamprecht
2023-08-24  8:03 ` [pve-devel] [PATCH qemu-server v10 3/6] test cases for clipboard spice & std Markus Frank
2023-08-24  8:03 ` [pve-devel] [PATCH novnc v10 4/6] add "show clipboard button" patch to series Markus Frank
2023-08-24  8:03 ` [pve-devel] [PATCH manager v10 5/6] add clipboard checkbox to VM Options Markus Frank
2023-09-07  9:38   ` Thomas Lamprecht
2023-08-24  8:03 ` [pve-devel] [PATCH docs v10 6/6] add noVNC clipboard documentation Markus Frank

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal