* [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
* 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
* [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