public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard
@ 2023-04-12  8:57 Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 1/5] enable clipboard parameter in vga_fmt Markus Frank
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Markus Frank @ 2023-04-12  8:57 UTC (permalink / raw)
  To: pve-devel

qemu-server:

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 (2):
  enable clipboard parameter in vga_fmt
  test cases for clipboard spice & std

 PVE/API2/Qemu.pm                            | 13 ++++
 PVE/QemuServer.pm                           | 68 ++++++++++++++-------
 test/cfg2cmd/noVNC-clipboard-spice.conf     |  1 +
 test/cfg2cmd/noVNC-clipboard-spice.conf.cmd | 27 ++++++++
 test/cfg2cmd/noVNC-clipboard-std.conf       |  1 +
 test/cfg2cmd/noVNC-clipboard-std.conf.cmd   | 27 ++++++++
 6 files changed, 116 insertions(+), 21 deletions(-)
 create mode 100644 test/cfg2cmd/noVNC-clipboard-spice.conf
 create mode 100644 test/cfg2cmd/noVNC-clipboard-spice.conf.cmd
 create mode 100644 test/cfg2cmd/noVNC-clipboard-std.conf
 create mode 100644 test/cfg2cmd/noVNC-clipboard-std.conf.cmd


novnc-pve:

Markus Frank (1):
  added 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:

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

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

 www/manager6/qemu/DisplayEdit.js |  6 ++++++
 www/manager6/qemu/Options.js     | 34 ++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)


pve-docs:

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

Markus Frank (1):
  added noVNC clipboard documentation

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

-- 
2.30.2





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

* [pve-devel] [PATCH qemu-server v5 1/5] enable clipboard parameter in vga_fmt
  2023-04-12  8:57 [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard Markus Frank
@ 2023-04-12  8:57 ` Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 2/5] test cases for clipboard spice & std Markus Frank
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Markus Frank @ 2023-04-12  8:57 UTC (permalink / raw)
  To: pve-devel

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.

added clipboard variable to return at status/current

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

Signed-off-by: Markus Frank <m.frank@proxmox.com>
---
 PVE/API2/Qemu.pm  | 13 +++++++++
 PVE/QemuServer.pm | 68 ++++++++++++++++++++++++++++++++---------------
 2 files changed, 60 insertions(+), 21 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 587bb22..9de04cb 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -970,6 +970,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();
@@ -1760,6 +1763,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 ((!defined($conf->{$opt}) || $conf->{$opt} =~ m/spice/) && $param->{$opt} =~ m/spice/) {
 			$rpcenv->check_vm_perm($authuser, $vmid, undef, ['VM.Config.HWType']);
@@ -2580,6 +2587,11 @@ __PACKAGE__->register_method({
 		type => 'boolean',
 		optional => 1,
 	    },
+	    clipboard => {
+		description => "QEMU clipboard for noVNC is enabled in config.",
+		type => 'boolean',
+		optional => 1,
+	    },
 	},
     },
     code => sub {
@@ -2598,6 +2610,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');
 
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 40be44d..8a3f7c6 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -193,8 +193,16 @@ my $vga_fmt = {
 	minimum => 4,
 	maximum => 512,
     },
+    clipboard => {
+	description => "enable clipboard (requires spice tools in the guest)",
+	type => 'boolean',
+	optional => 1,
+	default => 0
+    }
 };
 
+my $clipboardregex = qr/^(std|cirrus|vmware|virtio|qxl)/;
+
 my $ivshmem_fmt = {
     size => {
 	type => 'integer',
@@ -1405,6 +1413,14 @@ sub pve_verify_hotplug_features {
     die "unable to parse hotplug option\n";
 }
 
+sub assert_clipboard_config {
+    my ($vga) = @_;
+
+    if ($vga->{clipboard} && $vga->{type} !~ $clipboardregex) {
+	die "vga type $vga->{type} is not compatible with clipboard\n";
+    }
+}
+
 sub scsi_inquiry {
     my($fh, $noerr) = @_;
 
@@ -3933,9 +3949,13 @@ sub config_to_command {
 	push @$devices, '-device', "virtio-rng-pci,rng=rng0$limiter_str$rng_addr";
     }
 
+    my $spicedevices = [];
     my $spice_port;
 
-    if ($qxlnum || $vga->{type} =~ /^virtio/) {
+    assert_clipboard_config($vga);
+
+    if ($qxlnum || $vga->{type} =~ /^virtio/
+	|| ($vga->{clipboard} && $vga->{type} =~ $clipboardregex)) {
 	if ($qxlnum > 1) {
 	    if ($winversion){
 		for (my $i = 1; $i < $qxlnum; $i++){
@@ -3953,34 +3973,40 @@ sub config_to_command {
 		push @$cmd, '-global', "qxl-vga.vram_size=$vram";
 	    }
 	}
-
 	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 @$spicedevices, '-device', "virtio-serial,id=spice$pciaddr";
+	if ($vga->{clipboard}) {
+	    push @$spicedevices, '-chardev', 'qemu-vdagent,id=vdagent,name=vdagent,clipboard=on';
+	} elsif ($vga->{type} =~ /^virtio/ || $qxlnum) {
+	    push @$spicedevices, '-chardev', 'spicevmc,id=vdagent,name=vdagent';
+	}
+	push @$spicedevices, '-device', "virtserialport,chardev=vdagent,name=com.redhat.spice.0";
 
-	push @$devices, '-device', "virtio-serial,id=spice$pciaddr";
-	push @$devices, '-chardev', "spicevmc,id=vdagent,name=vdagent";
-	push @$devices, '-device', "virtserialport,chardev=vdagent,name=com.redhat.spice.0";
+	if ($qxlnum || $vga->{type} =~ /^virtio/) {
+	    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 $localhost = PVE::Network::addr_to_ip($nodeaddrs[0]->{addr});
-	$spice_port = PVE::Tools::next_spice_port($pfamily, $localhost);
+	    my $localhost = PVE::Network::addr_to_ip($nodeaddrs[0]->{addr});
+	    $spice_port = PVE::Tools::next_spice_port($pfamily, $localhost);
 
-	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 $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 @$spicedevices, '-chardev', "spiceport,id=foldershare,name=org.spice-space.webdav.0";
+		push @$spicedevices, '-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 @$spicedevices, '-spice', "$spice_opts";
+	}
     }
 
+    push @$devices, @$spicedevices;
+
     # enable balloon by default, unless explicitly disabled
     if (!defined($conf->{balloon}) || $conf->{balloon}) {
 	my $pciaddr = print_pci_addr("balloon0", $bridges, $arch, $machine_type);
-- 
2.30.2





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

* [pve-devel] [PATCH qemu-server v5 2/5] test cases for clipboard spice & std
  2023-04-12  8:57 [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 1/5] enable clipboard parameter in vga_fmt Markus Frank
@ 2023-04-12  8:57 ` Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH novnc v5 3/5] added show clipboard button patch to series Markus Frank
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Markus Frank @ 2023-04-12  8:57 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/noVNC-clipboard-spice.conf     |  1 +
 test/cfg2cmd/noVNC-clipboard-spice.conf.cmd | 27 +++++++++++++++++++++
 test/cfg2cmd/noVNC-clipboard-std.conf       |  1 +
 test/cfg2cmd/noVNC-clipboard-std.conf.cmd   | 27 +++++++++++++++++++++
 4 files changed, 56 insertions(+)
 create mode 100644 test/cfg2cmd/noVNC-clipboard-spice.conf
 create mode 100644 test/cfg2cmd/noVNC-clipboard-spice.conf.cmd
 create mode 100644 test/cfg2cmd/noVNC-clipboard-std.conf
 create mode 100644 test/cfg2cmd/noVNC-clipboard-std.conf.cmd

diff --git a/test/cfg2cmd/noVNC-clipboard-spice.conf b/test/cfg2cmd/noVNC-clipboard-spice.conf
new file mode 100644
index 0000000..d9d933d
--- /dev/null
+++ b/test/cfg2cmd/noVNC-clipboard-spice.conf
@@ -0,0 +1 @@
+vga: qxl,clipboard=1
diff --git a/test/cfg2cmd/noVNC-clipboard-spice.conf.cmd b/test/cfg2cmd/noVNC-clipboard-spice.conf.cmd
new file mode 100644
index 0000000..f24cc7f
--- /dev/null
+++ b/test/cfg2cmd/noVNC-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/noVNC-clipboard-std.conf b/test/cfg2cmd/noVNC-clipboard-std.conf
new file mode 100644
index 0000000..ec84637
--- /dev/null
+++ b/test/cfg2cmd/noVNC-clipboard-std.conf
@@ -0,0 +1 @@
+vga: std,clipboard=1
diff --git a/test/cfg2cmd/noVNC-clipboard-std.conf.cmd b/test/cfg2cmd/noVNC-clipboard-std.conf.cmd
new file mode 100644
index 0000000..c0c6cd2
--- /dev/null
+++ b/test/cfg2cmd/noVNC-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.30.2





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

* [pve-devel] [PATCH novnc v5 3/5] added show clipboard button patch to series
  2023-04-12  8:57 [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 1/5] enable clipboard parameter in vga_fmt Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 2/5] test cases for clipboard spice & std Markus Frank
@ 2023-04-12  8:57 ` Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH manager v5 4/5] added clipboard checkbox to VM Options Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH docs v5 5/5] added noVNC clipboard documentation Markus Frank
  4 siblings, 0 replies; 7+ messages in thread
From: Markus Frank @ 2023-04-12  8:57 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..4816450
--- /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..93ff4ca 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) {
++			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.30.2





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

* [pve-devel] [PATCH manager v5 4/5] added clipboard checkbox to VM Options
  2023-04-12  8:57 [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard Markus Frank
                   ` (2 preceding siblings ...)
  2023-04-12  8:57 ` [pve-devel] [PATCH novnc v5 3/5] added show clipboard button patch to series Markus Frank
@ 2023-04-12  8:57 ` Markus Frank
  2023-04-12  8:57 ` [pve-devel] [PATCH docs v5 5/5] added noVNC clipboard documentation Markus Frank
  4 siblings, 0 replies; 7+ messages in thread
From: Markus Frank @ 2023-04-12  8:57 UTC (permalink / raw)
  To: pve-devel

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

diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js
index 9bb1763e..05f12eed 100644
--- a/www/manager6/qemu/DisplayEdit.js
+++ b/www/manager6/qemu/DisplayEdit.js
@@ -4,6 +4,7 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
     onlineHelp: 'qm_display',
 
     onGetValues: function(values) {
+	values = Ext.apply(this.originalConfig, values);
 	let ret = PVE.Parser.printPropertyString(values, 'type');
 	if (ret === '') {
 	    return { 'delete': 'vga' };
@@ -11,6 +12,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..58fd8a65 100644
--- a/www/manager6/qemu/Options.js
+++ b/www/manager6/qemu/Options.js
@@ -154,6 +154,40 @@ Ext.define('PVE.qemu.Options', {
 		    },
 		} : undefined,
 	    },
+	    vga: {
+		header: gettext('Use noVNC clipboard'),
+		defaultValue: false,
+		renderer: function(value) {
+		    let vga = PVE.Parser.parsePropertyString(value, 'type');
+		    return vga.clipboard ? Proxmox.Utils.yesText : Proxmox.Utils.noText;
+		},
+		editor: caps.vms['VM.Config.HWType'] ? {
+		    xtype: 'proxmoxWindowEdit',
+		    subject: gettext('Use noVNC clipboard'),
+		    onlineHelp: 'qm_display',
+		    items: {
+			xtype: 'pveDisplayInputPanel',
+			items: {
+			    xtype: 'proxmoxcheckbox',
+			    name: '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, 'clipboard', 0, 1);
+			    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.30.2





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

* [pve-devel] [PATCH docs v5 5/5] added noVNC clipboard documentation
  2023-04-12  8:57 [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard Markus Frank
                   ` (3 preceding siblings ...)
  2023-04-12  8:57 ` [pve-devel] [PATCH manager v5 4/5] added clipboard checkbox to VM Options Markus Frank
@ 2023-04-12  8:57 ` Markus Frank
  2023-04-14 11:08   ` Friedrich Weber
  4 siblings, 1 reply; 7+ messages in thread
From: Markus Frank @ 2023-04-12  8:57 UTC (permalink / raw)
  To: pve-devel

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

diff --git a/qm.adoc b/qm.adoc
index bd535a2..6b95518 100644
--- a/qm.adoc
+++ b/qm.adoc
@@ -717,6 +717,23 @@ 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.
 
+.noVNC clipboard
+You can enable the noVNC clipboard by setting `clipboard` to 1.
+
+----
+# qm set <vmid> -vga <displaytype>,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`.
+
+Once you have installed the spice guest tools, you can use the clipboard
+function in the noVNC console. 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 *noVNC* clipboard,
+if `clipboard` is set to 1.
+
 [[qm_usb_passthrough]]
 USB Passthrough
 ~~~~~~~~~~~~~~~
-- 
2.30.2





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

* Re: [pve-devel] [PATCH docs v5 5/5] added noVNC clipboard documentation
  2023-04-12  8:57 ` [pve-devel] [PATCH docs v5 5/5] added noVNC clipboard documentation Markus Frank
@ 2023-04-14 11:08   ` Friedrich Weber
  0 siblings, 0 replies; 7+ messages in thread
From: Friedrich Weber @ 2023-04-14 11:08 UTC (permalink / raw)
  To: Proxmox VE development discussion, Markus Frank

I tested this (also discussed off-list, posting here for the record):

Creating a new VM with the default display (no `vga` config entry),
then enabling the "Use noVNC clipboard" option via the Web UI results in
a "vga type is not compatible with clipboard (500)" error. It works if I
explicitly set the display to Standard VGA first.

After that and after installing spice-vdgent in the guest, I can use the
noVNC console to control the guest keyboard -- nice!

Below, my 2 cents regarding docs/naming/GUI:

On 12/04/2023 10:57, Markus Frank wrote:
> +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`.

I was initially confused where to install the SPICE tools (but that
might just be me).

Maybe we could also include a link to the SPICE guest tools here?

Nit: "spice" guest tools should probably be "SPICE" guest tools

> +Once you have installed the spice guest tools, you can use the clipboard
> +function in the noVNC console.

For me it wasn't immediately clear what the clipboard function is -- now
I understand it is the additional button in the collapsible sidebar of
the noVNC window. Maybe we could have a few extra words here to make
that clearer?

> 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 *noVNC* clipboard,
> +if `clipboard` is set to 1.

To me, `clipboard` sounds like a rather general option not tied to a
specific display driver, but if I understand correctly, `clipboard=1`
actually means "use the noVNC clipboard". I wonder if it would be better
to have an option name that specifically refers to noVNC?

One last thing regarding GUI: I do understand the reasoning for putting
the checkbox to "Options" -- but I do find it a bit counterintuitive
that the Hardware->Display entry now reads "Standard VGA
(std,clipboard=1)" even though I cannot change the `clipboard` setting
by double-clicking the entry. But also here, that might just me.




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

end of thread, other threads:[~2023-04-14 11:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-12  8:57 [pve-devel] [PATCH qemu-server/manager/novnc/docs v5 0/5] Feature noVNC-Clipboard Markus Frank
2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 1/5] enable clipboard parameter in vga_fmt Markus Frank
2023-04-12  8:57 ` [pve-devel] [PATCH qemu-server v5 2/5] test cases for clipboard spice & std Markus Frank
2023-04-12  8:57 ` [pve-devel] [PATCH novnc v5 3/5] added show clipboard button patch to series Markus Frank
2023-04-12  8:57 ` [pve-devel] [PATCH manager v5 4/5] added clipboard checkbox to VM Options Markus Frank
2023-04-12  8:57 ` [pve-devel] [PATCH docs v5 5/5] added noVNC clipboard documentation Markus Frank
2023-04-14 11:08   ` Friedrich Weber

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