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 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel