Public bug reported:
## Summary
On systems where a GPU takes a long time to initialize (e.g. NVIDIA 580-open
driver with GSP firmware, ~22 seconds), `lightdm.service` starts the X server
before the GPU's DRM device is registered. X then configures only the
already-present GPU (the Intel iGPU), and outputs attached to the late-arriving
GPU (all external monitors in my case) are never properly configured. The
result on every **cold boot** is that only the laptop panel works; a warm
`systemctl restart lightdm` works fine because the GPU is already initialized.
## Environment
- LightDM 1.30.0 (package `1.30.0-0ubuntu14`)
- Pop!_OS 24.04 LTS (Ubuntu 24.04 base), kernel 7.0.11-76070011-generic
- Hybrid laptop: Intel UHD (CometLake-H GT2) + NVIDIA RTX 2080 Super Mobile
- NVIDIA driver: `nvidia-driver-580-open` 580.173.02 (open kernel modules + GSP
firmware)
- External monitors connected through the NVIDIA GPU (USB-C dock, DP MST)
- Session: Xfce (X11), `system76-power graphics nvidia` (discrete mode), proper
`OutputClass` configs in place (`Driver "nvidia"`, `PrimaryGPU "Yes"`,
ModulePath set)
## Evidence (journal, cold boot)
```
23:55:58 kernel: [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
23:56:09 systemd[1]: Starting lightdm.service - Light Display Manager...
23:56:09 systemd[1]: Started lightdm.service - Light Display Manager.
23:56:20 kernel: [drm] [nvidia-drm] Failed to get dynamic displays during
device registration.
23:56:20 kernel: [drm] Initialized nvidia-drm 0.0.0 for 0000:01:00.0 on minor 1
23:56:30 kernel: nvidia 0000:01:00.0: [drm] fb1: nvidia-drmdrmfb frame buffer
device
```
X starts at 23:56:09; the NVIDIA DRM device only exists from 23:56:20. Xorg's
log shows
the NVIDIA card being hotplugged ~6s after server start, getting claimed by
`modesetting` as a GPU screen (`modeset(G0)`) instead of the nvidia driver
(the `OutputClass` ModulePath is not applied at that point), ending in
`(EE) modeset(G0): Failed to create pixmap` and a single-provider X screen.
## Steps to reproduce
1. Hybrid Intel+NVIDIA laptop, NVIDIA open driver (slow GSP init), external
monitors on the NVIDIA GPU.
2. LightDM as display manager, X11 session.
3. Cold boot.
4. Only the iGPU panel is configured; external displays stay off. `xrandr
--listproviders` shows 1 provider.
5. `sudo systemctl restart lightdm` (GPU now initialized) → everything works, 2
providers.
## Expected behavior
LightDM (or its systemd unit) should offer a way to wait for GPU/DRM devices to
be ready
before launching the X server — e.g. a config option listing DRM devices to
wait for, or
ordering against `dev-dri-cardN.device` — so that slow-probing GPUs are present
when the
server performs initial output configuration.
## Workaround
A systemd drop-in delaying lightdm until a DRM card bound to the nvidia driver
exists:
```ini
# /etc/systemd/system/lightdm.service.d/wait-nvidia.conf
[Service]
ExecStartPre=/bin/sh -c 'for i in $(seq 1 60); do for d in
/sys/class/drm/card*/device/driver; do [ "$(basename $(readlink -f $d))" =
"nvidia" ] && exit 0; done; sleep 0.5; done; exit 0'
```
This fully fixes the issue, which confirms the race. It would be great to have
a supported
mechanism instead of a hand-rolled drop-in.
** Affects: lightdm (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2161262
Title:
lightdm starts X before slow-initializing GPUs register their DRM
device, leaving external displays unconfigured (race condition on cold
boot)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/2161262/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs