众所周知,nVIDIA对GNU/Linux的支持一直都很消极,这也引来了Linus Torvalds本人的竖中指抗议。曾经,在很长一段时间内,nVIDIA都是不支持Wayland的,直至近期才有了Wayland支持。然而,目前仍有不少发行版(例如我正在使用的Manjaro GNOME),在某些情况下不会在搭载nVIDIA显卡的设备上启用Wayland。
So nVIDIA, fxxk you. 🖕
——Linus Torvalds
为什么要使用Wayland呢?
- Wayland对触摸板和触摸屏的支持更好
Wayland原生支持多点触控(包括触摸板和触摸屏),因此可以更好地实现多指手势等功能——例如双指滚动页面/缩放、三指打开活动视图/切换桌面等。GNOME 40引入了全新的布局,加入了多种多指手势,使用体验非常流畅,很适合在笔记本使用。在浏览器中,若启用了Wayland,双指滚动会变得平滑(而不是模拟滚轮),双指捏合可以实现丝滑缩放。Xorg只能用触摸板和触摸屏模拟鼠标,而并没有原生的多点触控支持。
GNOME Xorg会话也可以通过插件实现多指手势,但仅限于纯GTK程序,在浏览器和别的程序中仍然只有双指模拟滚轮(触摸板),没有双指捏合缩放、三指手势等功能。 - 使用多显示器时,Wayland没有画面撕裂
我为我的笔记本接了一台大显示器,两个屏幕一起用。但是,在Xorg下使用多显示器,会出现稳定的画面撕裂问题——画面会在相对固定的位置发生撕裂,如图所示。
而Wayland就没有这个问题,整个画面都可以同步刷新。
如何在搭载nVIDIA显卡的设备上强制启用Wayland
修改GDM的配置
打开/etc/gdm/custom.conf,可以看到其中有这么一部分:
# Uncomment the line below to force the login screen to use Xorg
#WaylandEnable=false
这段预留代码原本是用于强制用Xorg显示登录屏幕的,但是我们还是可以取消注释这一行,并改为true。修改后的这一部分如下。
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=true
实际上,修改这个并不会使GDM强制用Wayland显示登录界面。
清除GDM的udev规则,使GDM不要试图禁用Wayland会话
/usr/lib/udev/rules.d/61-gdm.rules这个文件定义了GDM应在何时自动禁用Wayland会话。
将这个文件复制到安全的地方,然后将原文件清空,留着一个空的rules文件。
注意
若删除或移走此rules文件,在GDM更新时会重新放入一个有内容的rules文件,这就会导致Wayland再次被禁用。
修改grub,添加内核参数
打开/etc/default/grub文件,在“GRUB_CMDLINE_LINUX_DEFAULT”后添加“nvidia-drm.modeset=1”。
修改后,用root用户执行以下命令刷新grub引导菜单:
grub-mkconfig -o /boot/grub/grub.cfg
修改/etc/mkinitcpio.conf,加入显卡驱动
在MODULES的括号中加入nvidia nvidia_modeset nvidia_uvm nvidia_uvm nvidia_drm这几个模块,然后执行以下命令应用修改:
sudo mkinitcpio -P
至此,重启电脑即可使用Wayland打开GNOME会话。不过,我的设备用如上方法强制启用Wayland后,却无法再启动GNOME Xorg会话了。好在我目前暂时没使用只支持Xorg会话的程序,也就不需要Xorg会话了。