How to make Wayland work on an NVIDIA GPU
Wayland requires the nvidia gpu to have modesetting enabled, to do that you have to add the nvidia drivers to the mkinitcpio modules and add the nvidia-drm.modeset=1
kernel flag
Adding the nvidia mkinitcpio modules
To add the required nvidia modules nvidia nvidia_modeset nvidia_uvm nvidia_drm
to the mkinitcpio modules you'll have to edit /etc/mkinitcpio.conf
by running sudo nano /etc/mkinitcpio.conf
in that file there should be a line that looks like this:
MODULES=()
you want to add the modules in the parentheses, the module names are seperated by spaces, in the end the line should look like this:
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
To save the file you have to press CTRL+O
and to quit CTRL+X
Now you want to generate the initramfs:
sudo mkinitcpio -P
Adding the kernel flag
To add the kernel flag with grub, you have to edit /etc/default/grub
by running sudo nano /etc/default/grub
, you should find a line that looks like this:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
You'll have to append nvidia-drm.modeset=1
to that line, so that it would look like this:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet nvidia_drm.modeset=1"
Just like with the mkinitcpio modules, to save and quit you'll have to first press CTRL+O
and then CTRL+X
Once you add the kernel parameter, you want to regenerate the grub config to reflect the kernel flag changes, to do this you have to run
sudo grub-mkconfig -o /boot/grub/grub.cfg
This will generate the grub config and save it to /boot/grub/grub.cfg
Extra steps for GNOME and onyx
GDM uses some chipset dependent udev rules to see if it should force Xorg usage instead of letting you use Wayland. These udev rules can be disabled by running this command:
Removing the gdm udev that disables wayland
GDM uses some chipset dependent udev rules to see if it should force Xorg usage instead of letting you use Wayland. If you want to force-enable Wayland, run this command.
sudo ln -s /dev/null /etc/udev/rules.d/61-gdm.rules
This command should symlink GDM's udev rules to nothing. Rules in /etc/udev/rules.d/
should overwrite rules in /usr/lib/udev/rules.d
(which are shipped by the package itself and managed by your package manager).
And after that, reboot and GNOME Wayland should be working!
Rebooting
Once you went through all the steps, meaning you:
- added the mkinitcpio modules
- generated the initcpio
- added the kernel flags with grub
- regenerated the grub config
- optionally disabled udev rules
You should be able to use wayland! Just reboot and you should be able to log into a wayland session
If it still doesn't work, your GPU might not support Wayland on the proprietary NVIDIA drivers. There is no fix for this other than using the nouveau driver, which sadly doesn't perform as well as the propietary nvidia drivers.