Features/IntegratedCopyPaste

From QEMU
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Summary

Users have come to expect copy-paste between host and guest to work. This is also called clipboard sharing and makes it easier to work with graphical guests.

Details

We need session-level agents that need to talk to the host front-ends to do the clipboard synchronization. We also know that at some point, multiple session-level agents should be supported for multiple users/display servers. qemu-ga will have all the logic to proxy requests from these session-level agents up to the host via a shared virtio-serial channel.

So the overall work has been splitted into two parts:

  1. Developing an initial session-level agent for clipboard synchronization
  2. Handling communication between session-level agents and qemu-ga

Session-level clipboard synchronization agent

A per-session guest agent is needed to listen X11 PRIMARY and CLIPBOARD selections [0]. This agent will register to the GTK events related to those X11 selections and relay them to the session-level multiplexer probably using JSON. This is for the guest->host direction. The other direction will be supported as well.

Owner

Status

  • Track my progress here
  • Tasks done
    • Added a session-mode to qemu-ga for guest->host clipboard synchronization.
  • Tasks to be done
    • Add QMP commands for host->guest clipboard synchronization.

Communication between session-level agents and qemu-ga

A qemu-ga software needs to be installed in the guest system for this to work. Whenever a new session is initiated for a guest, a session specific process would start in the guest, which will talk to the qemu-ga service via a unix socket which in turn will communicate with the hypervisor on the host via a virtio-serial socket to transfer the content between the guest and the host.

Owner

Status

  • Track my progress here
  • Task at hand: Prepare patches and send them upstream for review
  • Task Done:
    • Open a unix socket in the the qga for communication with the per-session processes. Make a dummy process and test that the connection does work.
    • Make the qemu-ga work with several clients (session processes) simultaneously. Right now it works with just one client. and accepts no further connections.
    • Incorporate session_ids to identify the guest client sessions and allow them to make RPCs to the host
    • Parse the incoming responses from host to guest-session RPCs and test the proper working of RPCs and their responses.
    • Optimize the code, make it more robust, remove redundant information handling. Clean up the code for patching.
    • Test the code for multiple clients, remove hooks for testing and final cleanup

References

[0]: http://en.wikipedia.org/wiki/X_Window_selection