Hi Eike, Alon,

On 03/08/2012 08:33 PM, Eike Hein wrote:

Hi,

I recently sent a mail to Marc-André Lureau, inquiring about
clipboard sharing support in his virt-viewer builds for Win-
dows. It turned out that the reason clipboard sharing doesn't
work is because Xspice does not yet spawn an agent.

Marc-André subsequently got Alon Levy into the discussion,
who had this to say on how this might be pulled off:

"I'm really glad to hear someone is actually using this. To implement
clipboard sharing is indeed just an Xspice issue. You'll need to have an
agent talking to spice server not via a virtio device and qemu. Looking
at vdagent-linux I guess there are a few questions:
* do we run vdagentd and vdagent as subprocesses of Xspice
(actually Xorg)
* is there a way to emulate uinput (not related to clipboard)
* more a statement - I think the clipboard part is relatively easy,
you can replace the hardcoded /dev path for the virtio-serial port
with a pipe.

I guess I would try to split vdagent to a library and app, and then link
the library into spiceqxl_drv.so (i.e. xf86-video-qxl)."

I'm still pretty keen on getting this to work in my Xspice-
based setup, and since I was encouraged to bring this topic
to the list here goes. Please chime in :).

Eike, in case you don't know, I'm the main author of the Linux
spice-vdagent. I've been thinking a bit about re-using that
for Xspice (after Alon asked me this a couple of days ago) and
here is my 2 cents:

The linux agent consists of 2 parts, a system level daemon and
a per user (X) session agent process.

The system level daemon (spice-vdagentd):
-talks to the agent virtio serial port
-handles client mouse mode through uinput
-dispatches other messages to session process for the
 currently active session (it uses consolekit to find out
 which is the currently active session, think fast
 user switching and having multiple X-session open
 on different VTs)

The user session process (spice-vdagent):
-sends the resolution X is currently running at to
 spice-vdagentd, which needs this info to interpret
 the mouse events it gets from the client and feeds to
 the uinput device
-receives the desired (client native) resolution from the
 client, and uses Xrandr to switch to this
-handles copy and paste

If we want to re-use this all for X-spice, then the choosen
split actually comes in quite handy, with X-spice we don't
have a agent virtio serial port, and we don't need to send
mouse event through a uinput device either. So I suggest that
for X-spice we simply re-use the user session agent process
as is (making it connect to the running X-spice server), and
"throw away" the system level daemon, replacing it with some
functionality inside X-spice.

The user session agent process talks to the (to be removed
in the X-spice scenario) system level agent daemon through
the following unix domain socket:
/var/run/spice-vdagentd/spice-vdagent-sock

So I think that if we modify X-spice to register a chardev
with spice-server for the agent channel, and create a
/var/run/spice-vdagentd/spice-vdagent-sock unix socket and
forward all client agent messages between the 2 we are almost
done. All that then needs to be done is filter out mouse
event messages and inject those directly into the X-server.

Note that the protocol on the unix socket != the protocol
on the virtio serial port, so you will need to lift some code
from spice-vdagentd which does the parsing of the one and
wrapping of the other.

Later on we should make the path of the unix domain socket
a cmdline option for both X-spice and spice-vdagent so
that we can run multiple X-spice sessions on the same machine,
with each using there own socket.

Something else to worry about later is sharing the necessary
code from spice-vdagent with X-spice, for now I simply suggest
copying over the necessary files.

Regards,

Hans
_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to