[Spice-devel] [PATCH] desktop_layout: ignore unconnected video devices

Frediano Ziglio fziglio at redhat.com
Wed Nov 4 07:45:19 UTC 2020


> 
> Currently, the Windows agent does not function properly if it detects a
> non-QXL video adapter connected to the guest.  See:
> 
>    https://gitlab.freedesktop.org/spice/win32/vd_agent/-/issues/15
>    https://gitlab.freedesktop.org/spice/win32/vd_agent/-/issues/13
> 
> This is true even when the non-QXL adapter does not have any displays
> attached, such as when a physical GPU is passed through to the guest for
> AI/ML workloads.
> 
> With this patch, the agent ignores the presence of unconnected video
> outputs and the mouse works as expected.  If a display is connected to
> a non-QXL adapter, the behavior is unchanged.  (Tested on Windows 10 Pro
> x64.)
> 

Did you test with multiple monitors, specially with the first(s) QXL disabled?

> ---
>   vdagent/desktop_layout.cpp | 13 +++++++++++++
>   1 file changed, 13 insertions(+)
> 
> diff --git a/vdagent/desktop_layout.cpp b/vdagent/desktop_layout.cpp
> index 07074da..8b538a1 100644
> --- a/vdagent/desktop_layout.cpp
> +++ b/vdagent/desktop_layout.cpp
> @@ -48,6 +48,16 @@ DesktopLayout::~DesktopLayout()
>       delete _display_config;
>   }
> 
> +static BOOL
> +dev_has_monitor(DISPLAY_DEVICE &dev_info)
> +{
> +    DISPLAY_DEVICE mon_info;
> +
> +    ZeroMemory(&mon_info, sizeof(mon_info));
> +    mon_info.cb = sizeof(mon_info);
> +    return EnumDisplayDevices(dev_info.DeviceName, 0, &mon_info, 0);
> +}
> +
>   static bool
>   get_next_display(DWORD &dev_id, DISPLAY_DEVICE &dev_info)
>   {
> @@ -64,6 +74,9 @@ get_next_display(DWORD &dev_id, DISPLAY_DEVICE &dev_info)
>           if (wcsstr(dev_info.DeviceString, L"Citrix Indirect Display")) {
>               continue;
>           }
> +        if (!dev_has_monitor(dev_info)) {
> +            continue;
> +        }
>           return true;
>       }
>       return false;
> --
> 2.26.2
> 

Frediano



More information about the Spice-devel mailing list