Features/IntegratedCopyPaste: Difference between revisions

From QEMU
Line 44: Line 44:
* Track my progress [https://github.com/agrpallav/qemu-copypaste here]
* Track my progress [https://github.com/agrpallav/qemu-copypaste here]


* '''Task at hand:''' Optimize the code, make it more robust, remove redundant information handling. Clean up the code for patching.
* '''Task at hand:''' Test the code for multiple clients, remove hooks for testing and final cleanup
* '''Task Done:'''
* '''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.
** Parse the incoming responses from host to guest-session RPCs and test the proper working of RPCs and their responses.
** Incorporate session_ids to identify the guest client sessions and allow them to make RPCs to the host
** Optimize the code, make it more robust, remove redundant information handling. Clean up the code for patching.
** Make the qemu-ga work with several clients (session processes) simultaneously. Right now it works with just one client. and accepts no further connections.
** 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.


== References ==
== References ==


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

Revision as of 10:36, 8 August 2013

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
    • Guest->Host clipboard synchronization works.
  • Tasks to be done
    • Host->Guest clipboardsynchronization
    • Make some parts of the code shared so that they can be reused by SDL frontend

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: Test the code for multiple clients, remove hooks for testing and final cleanup
  • 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.

References

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