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.