我有一台 GeForce RTX 2070 SUPER,在我的计算机上运行 Arch 和 GNOME。
我确实记得在最近的 nvidia 驱动程序更新之前(特别是 Arch 上从 450.66-21 到 450.66-22)出现过屏幕撕裂,但激活完整组合管道能够修复它。然而,更新后,屏幕撕裂又出现了。升级到 nvidia-455 并没有解决任何屏幕撕裂问题。在整个过程中,完整合成管道处于活动状态,并且能够减少一些屏幕撕裂,但并非始终如此。
由于没有内核模式设置,并且除了 Full Composition Pipeline 之外,我的 xorg.conf 中也没有其他选项,因此不会出现屏幕撕裂,但会出现挂起问题。我醒来后立即看到一个空白屏幕,在屏幕加载之前挂起一两秒钟。在上述 nvidia 驱动程序更新之前,不会出现此类挂起问题。屏幕加载后,某些应用程序(例如 anki 和 vscode)出现黑色伪影和其他图形问题。例如,在 anki 中,整个屏幕是黑色的,而在 vscode 中,我看到侧面有一些黑色矩形,并且终端提示的文本消失了。更改工作区可以消除空白的 anki 屏幕,同时将鼠标悬停在工件上并重新打开应用程序内终端可以修复 vscode 问题。尽管如此,这是一个非常烦人的问题,它也会影响我尝试应用的一些 GNOME 主题。我怀疑同样的问题也会影响其他应用程序。
我花了一个半小时在网上研究这个问题并尝试了不同的解决方案,但没有成功。
xorg.conf 中没有 TripleBuffering 和 IndirectGLXProtocol 选项的模式设置(例如 nvidia-drm.modeset=1)不会导致挂起问题,但会导致严重的屏幕撕裂
打开 TripleBuffering 和/或关闭 IndirectGLXProtocol 会导致上述挂起问题,但不会出现屏幕撕裂(有或没有内核模式设置)。
正如您所看到的,我要么出现屏幕撕裂但没有暂停问题,要么没有屏幕撕裂和暂停问题。仅将 nvidia 软件包降级到破坏我的设置的驱动程序更新之前的版本会破坏 lightdm。在 9 月 17 日(驱动程序更新之前)降级到镜像是可行的,但并不理想,因为我宁愿进行图形不便的软件更新,也不愿计算机陷入困境。
我不完全确定这是 nvidia 驱动程序的具体问题,但考虑到上述事件,我相信这是相当合理的。
如果您遇到同样的问题,请告诉我。我也想知道您尝试过哪些解决方案。
答案1
我解决了问题!
Arch Linux 论坛上的好心人发现了我在启动过程中遇到的屏幕撕裂与竞争条件不一致的问题。如果 nvidia 模块加载正确,那么我就不会出现屏幕撕裂的情况。但如果没有,那么计算机将恢复到其他驱动程序(我很确定是 nouveau),并且会发生屏幕撕裂。为了解决这个问题,我通过将 nvidia 模块添加到 /etc/mkinitcpio.conf 中的列表来确保 nvidia 模块始终正确加载,MODULES
如下所示:
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
我还了解到,我遇到的挂起图形问题是由 nvidia 在挂起期间处理它认为“不必要的”视频内存引起的。为了解决这个问题,我通过将此行添加到我的 /etc/modprobe.d/nvidia.conf 来加载带有实验选项的 nvidia 模块:
options nvidia NVreg_PreserveVideoMemoryAllocations=1
最后,我重建了 initramfs 映像sudo mkinitcpio -p linux
并重新启动。 nvidia 现在在启动过程中始终加载(我可以看出,因为不再出现屏幕撕裂!),并且 anki 和 vscode 的所有图形问题都消失了。