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

overall changes v11:
* renamed vnc-clipboard to clipboard and changed it to a string

overall changes v9:
* renamed vnc_clipboard to vnc-clipboard


qemu-sever:

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                          | 15 ++++++
 PVE/QemuServer.pm                         | 66 ++++++++++++++++-------
 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, 119 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:

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


manager:

changes v11:
* added hint that SPICE & VNC Clipboard won't work at the same time.

changes 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     | 52 ++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)


docs:

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

Markus Frank (1):
  add VNC 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-sever v12 1/6] enable VNC clipboard parameter in vga_fmt
  2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
@ 2023-09-08 11:05 ` Markus Frank
  2023-09-08 11:06 ` [pve-devel] [PATCH qemu-sever v12 2/6] add clipboard variable to return at status/current Markus Frank
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-09-08 11:05 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 | 66 ++++++++++++++++++++++++++++++++++-------------
 2 files changed, 55 insertions(+), 18 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 9606e72..8a2fdef 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_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_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..2b84ed8 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -195,6 +195,13 @@ my $vga_fmt = {
 	minimum => 4,
 	maximum => 512,
     },
+    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,
+    },
 };
 
 my $ivshmem_fmt = {
@@ -1375,6 +1382,21 @@ sub pve_verify_hotplug_features {
     die "unable to parse hotplug option\n";
 }
 
+sub assert_clipboard_config {
+    my ($vga) = @_;
+
+    my $clipboard_regex = qr/^(std|cirrus|vmware|virtio|qxl)/;
+
+    if (
+	$vga->{'clipboard'} 
+	&& $vga->{'clipboard'} eq 'vnc'
+	&& $vga->{type} 
+	&& $vga->{type} !~ $clipboard_regex
+    ) {
+	die "vga type $vga->{type} is not compatible with VNC clipboard\n";
+    }
+}
+
 sub scsi_inquiry {
     my($fh, $noerr) = @_;
 
@@ -3945,7 +3967,10 @@ sub config_to_command {
 
     my $spice_port;
 
-    if ($qxlnum || $vga->{type} =~ /^virtio/) {
+    assert_clipboard_config($vga);
+    my $is_spice = $qxlnum || $vga->{type} =~ /^virtio/;
+
+    if ($is_spice || ($vga->{'clipboard'} && $vga->{'clipboard'} eq 'vnc')) {
 	if ($qxlnum > 1) {
 	    if ($winversion){
 		for (my $i = 1; $i < $qxlnum; $i++){
@@ -3966,29 +3991,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->{'clipboard'} && $vga->{'clipboard'} eq 'vnc') {
+	    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-sever v12 2/6] add clipboard variable to return at status/current
  2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
  2023-09-08 11:05 ` [pve-devel] [PATCH qemu-sever v12 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
@ 2023-09-08 11:06 ` Markus Frank
  2023-09-08 11:06 ` [pve-devel] [PATCH qemu-sever v12 3/6] test cases for clipboard spice & std Markus Frank
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-09-08 11:06 UTC (permalink / raw)
  To: pve-devel

By that noVNC is able to check if clipboard is active.

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
 PVE/API2/Qemu.pm | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 8a2fdef..49d0420 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -2697,6 +2697,13 @@ __PACKAGE__->register_method({
 		type => 'boolean',
 		optional => 1,
 	    },
+	    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,
+	    },
 	},
     },
     code => sub {
@@ -2715,6 +2722,7 @@ __PACKAGE__->register_method({
 	    my $spice = defined($vga->{type}) && $vga->{type} =~ /^virtio/;
 	    $spice ||= PVE::QemuServer::vga_conf_has_spice($conf->{vga});
 	    $status->{spice} = 1 if $spice;
+	    $status->{clipboard} = $vga->{clipboard};
 	}
 	$status->{agent} = 1 if PVE::QemuServer::get_qga_key($conf, 'enabled');
 
-- 
2.39.2





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

* [pve-devel] [PATCH qemu-sever v12 3/6] test cases for clipboard spice & std
  2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
  2023-09-08 11:05 ` [pve-devel] [PATCH qemu-sever v12 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
  2023-09-08 11:06 ` [pve-devel] [PATCH qemu-sever v12 2/6] add clipboard variable to return at status/current Markus Frank
@ 2023-09-08 11:06 ` Markus Frank
  2023-09-08 11:06 ` [pve-devel] [PATCH novnc v12 4/6] add "show clipboard button" patch to series Markus Frank
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-09-08 11:06 UTC (permalink / raw)
  To: pve-devel

add 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..54cfa38
--- /dev/null
+++ b/test/cfg2cmd/VNC-clipboard-spice.conf
@@ -0,0 +1 @@
+vga: qxl,clipboard=vnc
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..a980f42
--- /dev/null
+++ b/test/cfg2cmd/VNC-clipboard-std.conf
@@ -0,0 +1 @@
+vga: std,clipboard=vnc
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 v12 4/6] add "show clipboard button" patch to series
  2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
                   ` (2 preceding siblings ...)
  2023-09-08 11:06 ` [pve-devel] [PATCH qemu-sever v12 3/6] test cases for clipboard spice & std Markus Frank
@ 2023-09-08 11:06 ` Markus Frank
  2023-09-08 11:06 ` [pve-devel] [PATCH manager v12 5/6] add clipboard checkbox to VM Options Markus Frank
  2023-09-08 11:06 ` [pve-devel] [PATCH docs v12 6/6] add VNC clipboard documentation Markus Frank
  5 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-09-08 11:06 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..b87229e
--- /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 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..1b98f20 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.clipboard === "vnc") {
++			document.getElementById('noVNC_clipboard_button')
++			    .classList.remove('pve_hidden');
++		    }
+ 		},
+ 		failure: function(msg, code) {
+ 		    if (code === 403) {
+-- 
+2.39.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 v12 5/6] add clipboard checkbox to VM Options
  2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
                   ` (3 preceding siblings ...)
  2023-09-08 11:06 ` [pve-devel] [PATCH novnc v12 4/6] add "show clipboard button" patch to series Markus Frank
@ 2023-09-08 11:06 ` Markus Frank
  2023-09-20 13:45   ` Dominik Csapak
  2023-09-08 11:06 ` [pve-devel] [PATCH docs v12 6/6] add VNC clipboard documentation Markus Frank
  5 siblings, 1 reply; 8+ messages in thread
From: Markus Frank @ 2023-09-08 11:06 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     | 52 ++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js
index 9bb1763e..d7cd51a9 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.clipboard !== 'undefined') {
+	    values.clipboard = this.originalConfig.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..7b8283c6 100644
--- a/www/manager6/qemu/Options.js
+++ b/www/manager6/qemu/Options.js
@@ -154,6 +154,58 @@ Ext.define('PVE.qemu.Options', {
 		    },
 		} : undefined,
 	    },
+	    vga: {
+		header: gettext('Clipboard'),
+		defaultValue: false,
+		renderer: function(value) {
+		    let vga = PVE.Parser.parsePropertyString(value, 'type');
+		    return vga.clipboard ? vga.clipboard.toUpperCase() : "auto (SPICE)";
+		},
+		editor: caps.vms['VM.Config.HWType'] ? {
+		    xtype: 'proxmoxWindowEdit',
+		    subject: gettext('Clipboard'),
+		    onlineHelp: 'qm_display',
+		    items: {
+			xtype: 'pveDisplayInputPanel',
+			items: [
+			    {
+				xtype: 'proxmoxKVComboBox',
+				name: 'clipboard',
+				itemId: 'clipboardBox',
+				fieldLabel: gettext('Clipboard'),
+				deleteDefaultValue: true,
+				value: '__default__',
+				comboItems: [
+				    ['__default__', 'auto (SPICE)'],
+				    ['vnc', 'VNC'],
+				],
+			    },
+			    {
+				itemId: 'vdagentHint',
+				name: 'vdagentHint',
+				xtype: 'displayfield',
+				userCls: 'pmx-hint',
+				value: 'The SPICE Clipboard stops working when' +
+				    ' you are using the VNC Clipboard, as both' +
+				    ' rely on the same SPICE vdagent.',
+			    },
+			],
+			onGetValues: function(values) {
+			    values = Ext.apply(this.originalConfig, values);
+			    if (values.delete === "clipboard") {
+				delete values.clipboard;
+				delete values.delete;
+			    }
+			    let ret = PVE.Parser.printPropertyString(values, 'type');
+			    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 v12 6/6] add VNC clipboard documentation
  2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
                   ` (4 preceding siblings ...)
  2023-09-08 11:06 ` [pve-devel] [PATCH manager v12 5/6] add clipboard checkbox to VM Options Markus Frank
@ 2023-09-08 11:06 ` Markus Frank
  5 siblings, 0 replies; 8+ messages in thread
From: Markus Frank @ 2023-09-08 11:06 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..43c1da4 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 `clipboard` to `vnc`.
+
+----
+# qm set <vmid> -vga <displaytype>,clipboard=vnc
+----
+
+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 `clipboard` is set to `vnc`.
+
 [[qm_usb_passthrough]]
 USB Passthrough
 ~~~~~~~~~~~~~~~
-- 
2.39.2





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

* Re: [pve-devel] [PATCH manager v12 5/6] add clipboard checkbox to VM Options
  2023-09-08 11:06 ` [pve-devel] [PATCH manager v12 5/6] add clipboard checkbox to VM Options Markus Frank
@ 2023-09-20 13:45   ` Dominik Csapak
  0 siblings, 0 replies; 8+ messages in thread
From: Dominik Csapak @ 2023-09-20 13:45 UTC (permalink / raw)
  To: Proxmox VE development discussion, Markus Frank

Rest of the series looks fine to me (and tested ok), but here i have some comments/nits inline:

On 9/8/23 13:06, Markus Frank wrote:
> Signed-off-by: Markus Frank <m.frank@proxmox.com>
> ---
>   www/manager6/qemu/DisplayEdit.js |  8 +++++
>   www/manager6/qemu/Options.js     | 52 ++++++++++++++++++++++++++++++++
>   2 files changed, 60 insertions(+)
> 
> diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js
> index 9bb1763e..d7cd51a9 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.clipboard !== 'undefined') {
> +	    values.clipboard = this.originalConfig.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..7b8283c6 100644
> --- a/www/manager6/qemu/Options.js
> +++ b/www/manager6/qemu/Options.js
> @@ -154,6 +154,58 @@ Ext.define('PVE.qemu.Options', {
>   		    },
>   		} : undefined,
>   	    },
> +	    vga: {
> +		header: gettext('Clipboard'),
> +		defaultValue: false,
> +		renderer: function(value) {
> +		    let vga = PVE.Parser.parsePropertyString(value, 'type');
> +		    return vga.clipboard ? vga.clipboard.toUpperCase() : "auto (SPICE)";
> +		},
> +		editor: caps.vms['VM.Config.HWType'] ? {
> +		    xtype: 'proxmoxWindowEdit',
> +		    subject: gettext('Clipboard'),
> +		    onlineHelp: 'qm_display',
> +		    items: {
> +			xtype: 'pveDisplayInputPanel',
> +			items: [
> +			    {
> +				xtype: 'proxmoxKVComboBox',
> +				name: 'clipboard',
> +				itemId: 'clipboardBox',
> +				fieldLabel: gettext('Clipboard'),
> +				deleteDefaultValue: true,
> +				value: '__default__',
> +				comboItems: [
> +				    ['__default__', 'auto (SPICE)'],

nit: not sure if we really want to use 'auto (SPICE)' (@thomas) ?
wouldn't `${defaulttext} (SPICE)` fit our scheme better ?

> +				    ['vnc', 'VNC'],
> +				],
> +			    },
> +			    {
> +				itemId: 'vdagentHint',
> +				name: 'vdagentHint',
> +				xtype: 'displayfield',
> +				userCls: 'pmx-hint',
> +				value: 'The SPICE Clipboard stops working when' +
> +				    ' you are using the VNC Clipboard, as both' +
> +				    ' rely on the same SPICE vdagent.',
> +			    },

two nits here:
1. we may want to show the hint only when VNC is enabled
2. I'd remove the vdagent reference, since that is only an implementation detail
    so i'd write something like this:

----
Only one of either the SPICE or VNC clipboard can work at a time.
----
?

(also i'd put it in a gettext)

> +			],
> +			onGetValues: function(values) {
> +			    values = Ext.apply(this.originalConfig, values);
> +			    if (values.delete === "clipboard") {
> +				delete values.clipboard;
> +				delete values.delete;
> +			    }
> +			    let ret = PVE.Parser.printPropertyString(values, 'type');
> +			    return { vga: ret };
> +			},

not a nit:

this is missing the check if ret === '' (which then must send the delete parameter)
otherwise you can get the empty string into the config

> +			onSetValues: function(values) {
> +			    this.originalConfig = PVE.Parser.parsePropertyString(values.vga, 'type');
> +			    return this.originalConfig;
> +			},
> +		    },
> +		} : undefined,
> +	    },
>   	    hotplug: {
>   		header: gettext('Hotplug'),
>   		defaultValue: 'disk,network,usb',





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

end of thread, other threads:[~2023-09-20 13:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-08 11:05 [pve-devel] [PATCH qemu-sever/novnc/manager/docs v12 0/6] Feature VNC-Clipboard Markus Frank
2023-09-08 11:05 ` [pve-devel] [PATCH qemu-sever v12 1/6] enable VNC clipboard parameter in vga_fmt Markus Frank
2023-09-08 11:06 ` [pve-devel] [PATCH qemu-sever v12 2/6] add clipboard variable to return at status/current Markus Frank
2023-09-08 11:06 ` [pve-devel] [PATCH qemu-sever v12 3/6] test cases for clipboard spice & std Markus Frank
2023-09-08 11:06 ` [pve-devel] [PATCH novnc v12 4/6] add "show clipboard button" patch to series Markus Frank
2023-09-08 11:06 ` [pve-devel] [PATCH manager v12 5/6] add clipboard checkbox to VM Options Markus Frank
2023-09-20 13:45   ` Dominik Csapak
2023-09-08 11:06 ` [pve-devel] [PATCH docs v12 6/6] add VNC 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