Secondary display not refreshing properly

I’m running qubes 4.1 on a lenovo laptop with an intel iGPU and a nvidia GPU. When I connect a secondary display either through thunderbolt or HDMI, I can see the desktop background and move the mouse on the secondary display but when I try to move a window to this display the window is not appearing, even though I see the cursor moving.
If I put the display in ‘mirroring mode’, I see my desktop as it was when I set the mirror mode, with all the windows appearing properly. However it will stay in this state, whatever I’m doing on my main display, it will not refresh the secondary display, even though I can still see the cursor moving.
I tried with i3wm and xrandr, xfce; I tried using another physical monitor; I tried connecting directly though the hdmi port or through thunderlbolt… in all cases it’s the same behavior.
There don’t seem to be anything strange in Xorg or journalctl logs.
Anyone has an idea here?

Some ideas I’ve been through.
Change GPU settings in BIOS and check what happens.
Set External monitor as the main one and check.
Disable internal and check.

IIRC I had the same problem and starting a compositor, like picom, made the screen somehow refresh and work properly after (even if you kill picom).

Thank you for the suggestions. If I set the external monitor as the main one nothing is changing. If I disable the laptop display both displays go black. The only gpu related setting in the bios is ‘discrete’ mode which is essentially forcing the lapttop to use only the nvidia gpu. When I do that qube is not booting.

I tried starting compositors, picom and also comptom, sadly it doesn’t solve the issue.

Also I have installed qubes 4.2 release candidate on a seperate ssd and the same thing is happening, so it’s not specific to this installation.

Could it be an issue with the nouveau driver? My nvidia gpu is a 3070, I know that nouveau only support fully these gpu fairly recently. Has anyone been able to use multiple displays with nvidia 3000 or 4000 series in qubes?

I have a desktop computer with an Nvidia rtx3080ti with multiple external screens running Qubes OS, and I managed to make it work eventually. I remember struggling to get Qubes to use all the screens at once with the proper resolution.
I will not have access to that computer until the end of next week, so I have not much more configuration details to give except that I am running the nouveau driver with a 6+ kernel.

You could maybe find interesting stuff in dmesg (and xl dmesg) or maybe weird info returned by xrandr.

Edit: Since you are running on a laptop, have you considered using the integrated GPU for graphics so that you can do GPU passthrough in your qubes?

What I know for sure is that it is not possible to run external monitors on iGPU (unless, and that is the last straw, iGPU is tied to USB-C port, which is not my case). So I am left with NVIDIA. For that to work there are basically 2 solutions:

  1. To install Qubes while in BIOS is “discrete” mode is set and then to install either nouveau or proprietary driver in dom0 (and one of them installed gives only one resolution and refresh rate and I can’t remember which one), and then to run Qubes in “discrete” mode exclusively.
  2. To install Qubes in “Optimus” mode, then to run dom0 and whatever else on internal screen, while installing:
    a) sys-gui-gpu with dGPU only passed through to it, and set there “parallel” Qubes there.
    b) to pass through dGPu to single HVMs to get external screen.

A bit more on my experience, but without desired outcome

Anyway, I hope @b1two won’t forget to comeback with his setup to share here.

Good news. I have been able to make it work on hdmi after making a fresh install of qube while having the discrete mode setting active, after reading your suggestion. I have still an issue when connecting through usb-c (about 2/3 of the screen is active ) but it is refreshing properly now. So I guess you were right it was probably an issue with the intel iGPU.
I didn’t even have to install nouveau or nvidia drivers in dom0 (I guess nouveau is there by default?)
It’s a good temporary solution for me.

As for sys-gui-gpu I remember testing it a few month back but I was struggling to make i3 work with it and there were a few other issues with xfce. Also it was creating random freeze of my system. I didn’t dig too much into it but I think it could be a great solution for me down the line if I make it work properly.

I could probably do GPU passthrough when in hybrid mode but it would only work with standalone qubes then right? It would limit the usefulness for me.

For thunderbolt maybe someone know what could cause this issue? :

I tried changing the resolution and refresh rate but the right part of the screen is always like in the picture.


it would only work with standalone qubes then right?

You can use PCI passthrough, so GPU passthrough, on any type of qube (standalone, appvm, …) as long as it is running in hvm mode.

Note: there is actually a bug with GPU passthrough that prevents using qubes with more than 3.5GB of RAM while doing GPU passthrough. Thankfully, there is an easy workaround tweaking xen.cfg until it is properly fixed upstream.

Anyway, glad you manage to get your screen working!

Can you please clarify what you mean when you say thunderbolt? Is it thunderbolt docking station, or you mean on USB-C port on a laptop? Because if latter, it has nothing to do with thunderbolt controller, at least in my case.