[Spice-devel] [RFC/POC PATCH 00/16] add output_id to monitors_config

Lukáš Hrázký lhrazky at redhat.com
Tue Jun 5 15:30:26 UTC 2018


Hi everyone,

following is my attempt at solving the ID issues with monitors_config
and streaming. The concept is as follows:

1. The streaming-agent sends a new StreamInfo message when it starts
streaming. The message contains the output_id of the streamed monitor.
The actual value is the index in the list of xrandr outputs. Basically,
the number should uniquely identify a monitor in the guest context under
X.

2. The server copies the number into the SpiceMsgDisplayMonitorsConfig
message and sends it to the client as part of the monitors_config
exchange.

3. The client stores the output_id in it's list of monitor_configs. Here
I had to make significant changes, because the monitors_config code in
spice-gtk is very loosely written and also exposes quite a few
unnecessary details to the client app. The client sends the output_id
back to the server as part of the monitors_config messages
(VDAgentMonitorsConfigV2) and also uses it for the mouse motion event,
which also contains a display ID interpreted by the vd_agent. In the
end, the API/ABI towards the client app should remain unchanged.

4. The server passes the output_id in above-mentioned messages to the
vd_agent. The output_id is meaningless in the server context.
(Currently, it doesn't pass the monitors_config messages if there is a
QXL device that supports it, though. Needs more work.)

5. vd_agent:
  a) For mouse input, the output_id was passed in the original message,
  so no change needed here, it works.

  b) If the server sends monitors_config to the guest, the vdagent will
  prefer to use monitors_configs with the output_ids set, if such are
  present. In that case, it ignores monitors_configs with the output_id
  unset. If no output_ids are present, it should behave as it used to.

A couple of things to note:
- While I did copy the VDAgentMonitorsConfig to a different message for
backwards compatibility, I didn't do the same for
SpiceMsgDisplayMonitorsConfig, it remains to be done.

- I didn't introduce any capabilities to handle the compatibility, also
remains to be done. Hopefully it is also clear it will be quite a
non-trivial job to do that :( Ain't gonna make the code prettier either.

For your convenience, you can also pull the branches below:
https://gitlab.freedesktop.org/lukash/spice-protocol/tree/monitors-config-poc
https://gitlab.freedesktop.org/lukash/spice-common/tree/monitors-config-poc
https://gitlab.com/lhrazky/spice-streaming-agent/tree/monitors-config-poc
https://gitlab.freedesktop.org/lukash/spice/tree/monitors-config-poc
https://gitlab.freedesktop.org/lukash/spice-gtk/tree/monitors-config-poc
https://gitlab.freedesktop.org/lukash/vd_agent/tree/monitors-config-poc

All in all, it's big, complex and invasive. Note I did review the
emergency instructional video [1] and am therefore ready for any
bombardment you'll be sending my way :D (Don't hesitate to contact me
with questions either)

Last minute note: I've noticed some of the patches are missing
Signed-off-by line, since they are not for merging, should not be an
issue...


Lukáš Hrázký (16):
spice-protocol
  Add the StreamInfo message
  Create a version 2 of the VDAgentMonitorsConfig message
spice-common
  add output_id to SpiceMsgDisplayMonitorsConfig
spice-streaming-agent
  Send a StreamInfo message when starting to stream
spice-server
  Handle the StreamInfo message from the streaming agent
  Use VDAgentMonitorsConfigV2 that contains the output_id field
spice-gtk
  Rework the handling of monitors_config
  Remove the n_display_channels check when sending monitors_config
  Use an 'enabled' flag instead of status enum in monitors_config
  Use VDAgentMonitorsConfigV2 as the message for monitors_config
  Add output_id to the monitors_config
  Use the new output_id as display ID for the mouse motion event
vd_agent
  vdagent: Log the diddly doo X11 error
  Improve/add some logging messages
  Use VDAgentMonitorsConfigV2 instead of VDAgentMonitorsConfig
  vdagent: Use output_id from VDAgentMonitorsConfigV2

[1] https://www.youtube.com/watch?v=IKqXu-5jw60

-- 
2.17.1



More information about the Spice-devel mailing list