Hi folks, I'm looking for a good way to implement cut+paste support for vnc.
The vnc core protocol has support for text/plain cut+paste, and there is an extension adding support for other formats. That'll cover one part of the problem, exchanging cut+paste data between vnc client and qemu vnc server. The tricky part is the second: the guest <=> qemu communication. I see basically two possible approaches here: (1) Have some guest agent (spice does it that way). Advantage: more flexible, allows more features. Disadvantage: requires agent in the guest. (2) Send text as key events. Advantage: no guest agent needed. Disadvantage: is translated by guests keyboard map, so qemu needs to know the map for proper char -> key event translation. Only works for text/plain and only for chars you can easily type, anything needing input methods (emoji 😊 for example) isn't going to fly. I think that (1) is clearly the better way. Given that the agent would need to run in user wayland/xorg session context the existing qemu-guest-agent will not work. Also linking against some UI library like gtk3 for clipboard handling is not something we want for the qemu-guest-agent. So we need another one, I'll name it qemu-clipboard-agent for the rest of this mail. And we need a communication channel. I'd tend to model the qemu-clipboard-agent simliar to the qemu-guest-agent, i.e. have some stream as communication path and run some stream protocol over it. Stream options I see are (in order of personal preference): (1) New virtio-serial port. virtio-serial likely is there anyway for the qemu-guest-agent ... (2) Have qemu-clipboard-agent and qemu-guest-agent share the agent channel, i.e. qemu-clipboard-agent will proxy everything through qemu-guest-agent (spice does it that way). Protocol options I see are (not sure yet which to prefer, need to have a closer look at the candidates): (1) Add clipboard commands to QMP and use these. (2) Reuse the clipboard bits of the vnc protocol (forward VNC_MSG_CLIENT_CUT_TEXT messages to the guest agent) (3) Reuse the clipboard bits of the spice-agent protocol. (4) Reuse the clipboard bits of the wayland protocol. Once we have sorted the qemu <-> guest communication path it should be possible to also hook up other UIs (specifically gtk) without too much effort. Which probably makes (2) a rather poor choice. Comments? Suggestions? Other ideas? take care, Gerd