Christophe
(Typos are from my iPhone)

> Le 28 janv. 2021 à 21:24, Marc-André Lureau <marcandre.lur...@gmail.com> a 
> écrit :
> 
> 
> Hi
> 
>> On Thu, Jan 28, 2021 at 9:14 PM Gerd Hoffmann <kra...@redhat.com> wrote:
>>   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?
> 
> 
> 
> I also had recently some thoughts about how to implement clipboard sharing in 
> a more general way for QEMU.
> 
> I admit I like Christophe's suggestion ("it's somebody else problem"), but it 
> falls short to me as I don't know of a common open-source remoting solution 
> for various operating systems, and I don't see how it could integrate well 
> with our UI and remote protocols. Or look at reusing some VirtualBox code 
> perhaps?

Just to clarify, I did not think of my suggestion as “SEP” but more as a way to 
leverage existing knowledge regarding guest OS clipboard. More a “what should 
we steal” approach. 

> 
> Some things I keep in mind:
> - the spice protocol had a number of iterations to fix some races. It would 
> be great not to repeat the same mistakes, and I don't know if VNC have the 
> same flaws or not.
> - the spice agent design isn't great: the system agent proxies messages to 
> the active session. It would be nice if the new solution didn't have such a 
> middle-man.
> - with wayland, clipboard sharing isn't really possible. Or not in a seamless 
> way at least. Today it kinda works with some X11 compatibility extensions, 
> but this will eventually go away or change behaviour.
> - the GNOME desktop is working on remoting using RDP, and they are 
> implementing a DBus interface for it 
> (https://gitlab.gnome.org/jadahl/mutter/-/commits/wip/remote-desktop-clipboard)
> - it's not just about clipboard. We would also want to have some kind of drag 
> and drop (even if limited to files like Spice atm). We may want some 
> windowing integration. We may also want to have access to some desktop 
> services: apps, documents etc.. And what's not.
> 
> That leads me to think that virtio-serial is not very well suited, as it 
> doesn't allow various services / processes to come and go. I see vsock as a 
> much better alternative. (I also wonder if it handles control flow any better 
> btw)
> 
> I think we shoud work on getting the free desktops our best-class support. To 
> me, this means we need to speak the lingua franca, which is DBus. The great 
> thing is that DBus is also equipped to handle services that come and go, 
> handling discovery, introspection etc. Various services are already 
> available. As mentioned earlier, that's what the GNOME desktop will offer for 
> clipboard sharing. There are good chances other desktops will follow if that 
> design works, as it should be easy for them to implement the same service. 
> That means good reuse of existing desktop code. Speaking DBus on Windows, 
> MacOS or Android isn't an issue. However, vsock support may be a bit tricky 
> atm.
> 
> Fwiw, DBus doesn't yet officially support vsock connections: 
> https://gitlab.freedesktop.org/dbus/dbus/-/merge_requests/200. This a minor 
> detail, as once you give it a fd for transport, it doesn't really care (I 
> also took care of glib!1892 and Rust zbus)
> 
> Oh and of course, since this is a new daemon, it would be really a shame not 
> to write it in a modern language (hint! ;-).
> 
> Hope that helps,
> 
> -- 
> Marc-André Lureau

Reply via email to