Bug 2064602

Summary: [RFE]Support copy/paste in the VNC console in virt-viewer
Product: Red Hat Enterprise Linux 9 Reporter: Guo, Zhiyi <zhguo>
Component: virt-viewerAssignee: Daniel Berrangé <berrange>
Status: NEW --- QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 9.1CC: berrange, hongzliu, jjongsma, juzhou, mxie, tyan, tzheng, virt-maint, vwu, xiaodwan
Target Milestone: rcKeywords: FutureFeature
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Story
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2057768, 2060724    
Bug Blocks:    

Description Guo, Zhiyi 2022-03-16 09:05:42 UTC
Description of problem:
qemu-kvm has supported copy/paste in the vnc console since qemu-kvm 6.2.0, see:
Bug 1874926 - [RFE] copy/paste support in qemu VNC console

Beside Libvirt, virt-viewer should also support this feature.


Steps to Reproduce:
1.Start VM with VNC has copy/paste enabled, use virt-viewer connect to VM vnc port
2.Try to copy some characters from client machine and paste them to VM
3.Try to copy some characters from VM and paste them to client machine

Actual results:
copy/paste in step 2 and 3 doesn't work

Expected results:
copy/paste works good

Additional info:
I have checked virt-viewer-11.0-1.el9.x86_64 and copy/paste doesn't work. As a reference, vncviewer provided by tigervnc-1.11.0-21.el9.x86_64 has copy/paste works

Comment 2 Jonathon Jongsma 2022-03-17 15:40:43 UTC
(In reply to Guo, Zhiyi from comment #0)
> Description of problem:
> qemu-kvm has supported copy/paste in the vnc console since qemu-kvm 6.2.0,
> see:
> Bug 1874926 - [RFE] copy/paste support in qemu VNC console
> 
> Beside Libvirt, virt-viewer should also support this feature.
> 
> 
> Steps to Reproduce:
> 1.Start VM with VNC has copy/paste enabled, use virt-viewer connect to VM
> vnc port
> 2.Try to copy some characters from client machine and paste them to VM
> 3.Try to copy some characters from VM and paste them to client machine
> 
> Actual results:
> copy/paste in step 2 and 3 doesn't work
> 
> Expected results:
> copy/paste works good
> 
> Additional info:
> I have checked virt-viewer-11.0-1.el9.x86_64 and copy/paste doesn't work. As
> a reference, vncviewer provided by tigervnc-1.11.0-21.el9.x86_64 has
> copy/paste works

I've only done a cursory investigation so far, but I suspect that there may need to be some work done in gtk-vnc as well. One potentially significant difference between vncviewer/tigervnc and virt-viewer is that vncviewer sends a SetEncodings[1] message to the server when it connects, and this message includes the pseudo-encoding value 0xc0a1e5ce[2], which causes qemu to enable some clipboard-related functionality. 

[1] https://datatracker.ietf.org/doc/html/rfc6143#section-7.5.2
[2] https://gitlab.com/qemu-project/qemu/-/blob/1d60bb4b14601e38ed17384277aa4c30c57925d3/ui/vnc.h#L425

Comment 3 Daniel Berrangé 2022-03-17 16:16:39 UTC
(In reply to Jonathon Jongsma from comment #2)
> I've only done a cursory investigation so far, but I suspect that there may
> need to be some work done in gtk-vnc as well. One potentially significant
> difference between vncviewer/tigervnc and virt-viewer is that vncviewer
> sends a SetEncodings[1] message to the server when it connects, and this
> message includes the pseudo-encoding value 0xc0a1e5ce[2], which causes qemu
> to enable some clipboard-related functionality. 

That is the extended clipboard protocol:

  https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#extended-clipboard-pseudo-encoding

GTK-VNC does not implemenet that extension at this time. It only supports the original crude clipboard protocol 

  https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#clientcuttext
  https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#servercuttext