Ubuntu 20.04: Cursor blinking at boot after installing nvidia drivers
I am using nvidia-driver-460 version 460.39-0ubuntu0.20.04.1.
The GDM screen would only appear after typing Ctrl+Alt+F2 followed by Ctrl+Alt+F1.
Please comment and let me know if the following resolves the problem for you? Also, please mark yourself as affected by Bug #1811023 in Launchpad so this issue gets fixed.
Solution
The following seems to have fixed the issue for me, and the GDM screen now appears without having to resort to the above "trick".
-
Edit the file
/lib/udev/rules.d/61-gdm.rules
.sudo nano /lib/udev/rules.d/61-gdm.rules
The original file looks like this:
# disable Wayland on Hi1710 chipsets ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="/usr/lib/gdm3/gdm-disable-wayland" # disable Wayland when using the proprietary nvidia driver DRIVER=="nvidia", RUN+="/usr/lib/gdm3/gdm-disable-wayland"
Comment all of the lines as shown:
# disable Wayland on Hi1710 chipsets # ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="/usr/lib/gdm3/gdm-disable-wayland" # disable Wayland when using the proprietary nvidia driver # DRIVER=="nvidia", RUN+="/usr/lib/gdm3/gdm-disable-wayland"
Type Ctrl+X to exit, then Y, and then Enter to save the file.
-
Ensure that the Wayland is not disabled in GDM.
sudo nano /etc/gdm3/custom.conf
Comment the "WaylandEnable" line, if it is not already commented, as shown:
# WaylandEnable=false
Type Ctrl+X to exit. If you made changes, type Y, and then Enter to save the file.
-
Finally, reboot.
Explanation
The /lib/udev/rules.d/61-gdm.rules
file is supposed to prevent GDM from displaying the Wayland session option when the NVIDIA proprietary drivers are installed, since NVIDIA does not support Wayland.
However, in Ubuntu 20.04, there seems to be another redundant mechanism or rule that also prevents GDM from displaying the Wayland session option. I suspect this, because even after making the above change, the Wayland session option is still not displayed in GDM. (Setting WaylandEnable=true
in /etc/gdm3/custom.conf
has no effect).
Therefore, I have a hunch that there are two conflicting rules, and disabling one of the rules (i.e. /lib/udev/rules.d/61-gdm.rules
) seems to remove the conflict.
Here is the journalctl
boot log before making the above changes. You can see there is an error loading the "fb" module.
/usr/lib/gdm3/gdm-x-session[964]: (II) Loading sub module "fb"
/usr/lib/gdm3/gdm-x-session[964]: (II) LoadModule: "fb"
/usr/lib/gdm3/gdm-x-session[964]: (II) Loading /usr/lib/xorg/modules/libfb.so
/usr/lib/gdm3/gdm-x-session[964]: (II) Module fb: vendor="X.Org Foundation"
/usr/lib/gdm3/gdm-x-session[964]: compiled for 1.20.9, module version = 1.0.0
/usr/lib/gdm3/gdm-x-session[964]: ABI class: X.Org ANSI C Emulation, version 0.4
/usr/lib/gdm3/gdm-x-session[964]: Xorg: ../../../../dix/privates.c:384: dixRegisterPrivateKey: Assertion `!global_keys[type].created' failed.
/usr/lib/gdm3/gdm-x-session[964]: (EE)
/usr/lib/gdm3/gdm-x-session[964]: (EE) Backtrace:
Here is the journalctl
boot log after making the above changes. You can see the "fb" module loads successfully.
/usr/lib/gdm3/gdm-x-session[1357]: (II) Loading sub module "fb"
/usr/lib/gdm3/gdm-x-session[1357]: (II) LoadModule: "fb"
/usr/lib/gdm3/gdm-x-session[1357]: (II) Loading /usr/lib/xorg/modules/libfb.so
/usr/lib/gdm3/gdm-x-session[1357]: (II) Module fb: vendor="X.Org Foundation"
/usr/lib/gdm3/gdm-x-session[1357]: compiled for 1.20.9, module version = 1.0.0
/usr/lib/gdm3/gdm-x-session[1357]: ABI class: X.Org ANSI C Emulation, version 0.4
/usr/lib/gdm3/gdm-x-session[1357]: (II) Loading sub module "wfb"