ThinkPad X1 Gen 3 + Ubuntu 20.04: Blank screen on external monitor

I have new ThinkPad X1 Gen3, with dual boot - Win10 + Ubuntu 20.04. I’m trying to configure an external Asus 28" monitor to work as as extended display in Ubuntu. The monitor is being recognized by the system, but always remains blank. The same setup works fine on Win10.

SecureBoot is disabled.
I’ve installed nvidia drivers v460. Upgrade to (untested) v465 did not help, so I reverted back.
Bug report is attached, some debug information is pasted below and attached.
Any help will be appreciated.

anton@Anton-X1:~$ sudo lshw -c video
  *-display                 
       description: VGA compatible controller
       product: NVIDIA Corporation
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
       configuration: driver=nvidia latency=0
       resources: irq:179 memory:ad000000-adffffff memory:80000000-8fffffff memory:90000000-91ffffff ioport:3000(size=128) memory:ae080000-ae0fffff
  *-display
       description: VGA compatible controller
       product: UHD Graphics
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       logical name: /dev/fb0
       version: 05
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=i915 latency=0 mode=3840x2160 visual=truecolor xres=3840 yres=2160
       resources: iomemory:600-5ff iomemory:400-3ff irq:177 memory:6040000000-6040ffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff
anton@Anton-X1:~$ 
anton@Anton-X1:~$ nvidia-smi 
Thu Jul  1 19:27:29 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.80       Driver Version: 460.80       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 165...  Off  | 00000000:01:00.0  On |                  N/A |
| N/A   37C    P8     4W /  N/A |   1034MiB /  3911MiB |     11%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1008      G   /usr/lib/xorg/Xorg                230MiB |
|    0   N/A  N/A      1586      G   /usr/lib/xorg/Xorg                557MiB |
|    0   N/A  N/A      1758      G   /usr/bin/gnome-shell               94MiB |
|    0   N/A  N/A      2855      G   gnome-control-center                1MiB |
|    0   N/A  N/A      2907      G   ...AAAAAAAAA= --shared-files      135MiB |
+-----------------------------------------------------------------------------+
anton@Anton-X1:~$ 

nvidia-bug-report.log.gz (383.7 KB)

Hi khitrenovich,

you should use the PrimaraGPU option in xorg.conf
Otherwise, did you have a look here?

Yes, I went through the instructions in Black screen after install of nvidia driver ubuntu with no help.

Re PrimaryGPU, since I guess this is what you meant -
I just googled a bit and did the following, based on https://docs.fedoraproject.org/en-US/quick-docs/how-to-set-nvidia-as-primary-gpu-on-optimus-based-laptops/:

  1. copy /usr/share/X11/xorg.conf.d/10-nvidia.conf to (newly created) /etc/X11/xorg.conf.d/

  2. edit the file to add PrimaryGPU option:

anton@Anton-X1:~$ cat /etc/X11/xorg.conf.d/10-nvidia.conf
Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "PrimaryGPU" "Yes"
    ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection

anton@Anton-X1:~$ 
  1. reboot

Unfortunately, this did not help.

Fresh bug report is attached -
nvidia-bug-report.log.gz (428.3 KB)

The logs look like the monitor is detected correctly but not added to the screen. Can you disable and reenable it in the monitor manager? The screenshot in your OP was from the internal display.

You mean - from Settings => Displays?
I had switched from “Single…” to “Join…” mode couple of times, with no changes either.

Does running
xrandr --auto
enable it?

Hi again,

I was out for the whole week of July 4th, and when I came over today I fount out it started working as expected (even after a reboot). I have no idea what had changed, and I really hope it won’t stop working in the same mysterious way it started…

Regards,
Anton.

Actually, I was too fast to declare victory :(

Both monitors work fine initially after reboot, but the problem reappears after you lock the laptop (either manually or due to inactivity) and then unlock it. Running xrandr --auto has no visible effect, running xrandr without arguments shows both monitors as connected - but the external monitor remains blank.

Hope this new input will provide some clues to what actually happens here.

Thanks,
Anton.

Quick update -
I got totally desperate yesterday night and installed KDE in addition to Gnome, which ruined everything completely. I had to go with fresh Ubuntu install plus all the tweaks (ubuntu-drivers autoinstall + remove nomodeset stuff) and things seem to work fairly well now - at least when I’m using default display settings of 200%.

However, having the same 200% scaling on both 15" built-in monitor and 28" external display is not really practical. I tried to enable “fractional scaling” (which seems to be an only way to set different scale on different monitors), but this causes whatever is shown on the external monitor to go nuts… @generix - do you have any advice here by chance?