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
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:
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
Now you want to generate the initramfs:
sudo mkinitcpio -P
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:
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
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
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:
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!
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.