wayland -> X fallback is broken
tl;dr this is due to 70861874
After upgrading to 3.30 from 3.29.90 on my NVidia system, which uses X, I just had a blinking black cursor. Here's what's in the journal:
Sep 06 10:00:31 raleigh.local gdm3[3657]: GdmLocalDisplayFactory: display status changed: 4
Sep 06 10:00:31 raleigh.local gdm3[3657]: GdmDisplay: finish display
Sep 06 10:00:31 raleigh.local gdm3[3657]: GdmDisplayStore: Unreffing display: 0x55808b22d250
Sep 06 10:00:31 raleigh.local gdm3[3657]: GdmDisplay: Disposing display
4 is GDM_DISPLAY_FINISHED
. By contrast a successful fallback shows
Jul 24 17:23:58 raleigh.local gdm3[3799]: GdmDisplay: unmanage display
Jul 24 17:23:58 raleigh.local gdm3[3799]: GdmDisplay: display lasted 2.960566 seconds
Jul 24 17:23:58 raleigh.local gdm3[3799]: GdmLocalDisplayFactory: display status changed: 4
Jul 24 17:23:58 raleigh.local gdm3[3799]: GdmDisplayStore: Unreffing display: 0x55d41f9c3250
Jul 24 17:23:58 raleigh.local gdm3[3799]: GdmLocalDisplayFactory: Adding display on seat seat0
The difference in that in the working case the display is unmanaged, which happens in gdm_display_unmanaged
, called from self_destruct
- which itself is called when the greeter exits. self_destruct
contains
if (gdm_display_get_status (self) == GDM_DISPLAY_MANAGED) {
gdm_display_unmanage (self);
}
Setting a display to GDM_DISPLAY_MANAGED
happens when RegisterDisplay
is called. Indeed in the "good" log I have
Jul 24 17:23:56 raleigh.local gdm3[3799]: GdmManager: trying to register new display
Jul 24 17:23:56 raleigh.local gdm3[3799]: GdmLocalDisplayFactory: display status changed: 2
and the bad one doesn't have it.
I suppose what happens is that gdm-wayland-session
fails before the timeout introduced in 70861874 fires, and so the display is not managed and we fail to unmanage it, which would cause the Xorg fallback to happen.
The display is GDM_DISPLAY_PREPARED
when this failure happens, so perhaps it's an option to set the display to GDM_DISPLAY_FAILED
in this case. Dunno.