前情提要:听说Linux上N卡闭源驱动有了较大的更新,比如添加了drm和Xwayland硬件加速支持。正好手头Manjaro滚炸了(很久没更新了,大概跟新驱动有关),直接新装Arch Linux + GNOME + Wayland套餐。不过中间Wayland之路经历了很多曲折,期间多次放弃Wayland滚回Xorg。。。

仅仅提供一个参考,具体还得看平台和使用场景。

环境:

  • Host: MSI GS66 Stealth 10SF
  • OS: Arch Linux with Stable kernel
  • CPU: Intel i7-10750H
  • GPU: NVIDIA GeForce RTX 2070 Mobile

系统信息

如上图,标准的I+N双显卡游戏本。

注意,在写本文的时候,I+N方案Wayland支持程度仍然很差,当然使用Xorg性能也依然不佳(不然也不会想方设法去用Wayland

本文默认已经装好Arch Linux和GNOME,并且使用的是稳定版(非lts)内核。

NVIDIA闭源驱动安装

参考Archwiki所述Wayland需求

https://wiki.archlinux.org/title/Wayland#Requirements

个人认为,N卡使用Wayland的基本需求就是启用DRM和设置kms。

先安装NV驱动,两个包,nvidianvidia-utils。然后直接配置DRM和kms。

如Archwiki配置:

https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting

额外注意事项:

  • DRM使用early loading模式
  • I+N双显卡的用户最好再额外添加intel_agpi915两个内核模块。

设置完这些后重启电脑应该能在gdm选项内看到Wayland,如果没有,也可以通过此方法强制启用Wayland。

这些操作以后,Arch Linux就可以在Wayland模式下工作了。

启用显卡直连,在Wayland使用多显示器

如果你想要连接外部显示器,是有可能出现连接后没有反映,但是设置里面是能识别到外接屏幕的。具体什么原因我也不想深究,注:下文所述的一些原理都只是个人推测,请不要全部当真

下面只根据我的一些思路和一些Archlinuxcn社区的朋友的帮助,提供一个针对我的电脑的解决方案,希望能给予一定参考价值。

我的MSI笔记本和大多I+N双显卡游戏本默认使用混杂模式,即两个显卡同时启用。这样有好处:使用核显工作功耗更低,使用独显可以获得更好性能。这个技术也叫NVIDIA Optimus。

可是众所周知Optimus在linux上体验并不是很好。在Xorg下,使用PRIME之类的解决方案还算过得去。但是在Wayland下,双显卡方案基本没有支持。在上文的安装条件下,基本会成为主I卡,副N卡的局面,I卡负责输出,N卡辅助提供加速。外接显示器大概是直连N卡的。所以外接显示器大概就没有了显示输出(个人的无端猜想)。

所以,按照道理来讲,关闭混杂模式,单独使用独显应该就可以了吧。

事实上,我在BIOS设置里关闭了核显(或者设置主显卡为独立显卡后),笔记本内屏就不再显示了,包括之后BIOS设置界面也得使用外部屏幕。其实这种解决方案并不是关闭混杂模式,只是关闭了核显,只允许显卡输出罢了,下文会讲述原因。不过,也不得不说,屏蔽掉核显之后(仅有外部显示器),Wayland在外接屏幕上工作的还算不错。

不过我后来还是回到了双显卡Xorg单外接显示器(避免多显示器画面撕裂)方案。

这样的妥协显然不是完美的解决方案。

阴差阳错下,我得知一个Archlinuxcn的群友可以实现Wayland多屏幕(但是存在内建屏幕亮度无法调节的问题)。了解后得知他使用了显卡直连的模式(需要主板支持),抱着试试看的态度,发现了我的MSI笔记本是支持切换模式的(如下图)。

MSI VGA MODE设置

不过之前一直没有注意这个东西,默认状态为MS-Hybrid(混杂模式),一看名字就知道是给Windows做的功能。然后切换为Discrete离散模式。

这个显卡直连的意思大概是显卡与显示器(应该是内屏)连接的模式,默认工作在混杂模式(如上文所述的I+N混合工作方案,内建屏幕的输出核显负责的,N卡只是提供加速,所以在混杂模式开启的情况下,屏蔽核显会导致内屏直接停止工作),换成离散模式后,两个显卡的切断了联系,各自都可以直接对内建屏幕提供输出,这时候设置主显卡为N卡就有了意义,内屏直接连接显卡。

题外话,不止对于Linux用户,离散模式主N卡可以提供比混杂模式更好的性能,不过功耗更高。

设置主显示设备

这样配置后,后面的事情也就不用多说了,Wayland双屏幕终于算是完美实现了。

至于上面提到的内建屏幕无法调节亮度(无论Xorg还是Wayland),在我的MSI上没有遇到,可能是显卡比较老的缘故。不过这个问题已经在NVIDIA开发者论坛上有人在探讨了,应该不久就会跟进修复。

如果你有背光亮度问题,入口:

https://forums.developer.nvidia.com/t/laptop-backlight-control-regression-with-465-24-02/175585/80

补充更新

  • 2022.9.7: MSI Windows 上的 dragon center 也提供了显示模式切换的选项。