修复 Nvidia 显卡在 GNU/Linux 下的画面撕裂

最近发现使用 Nvidia 专有驱动时会有画面撕裂(但比 Nouveau 可以接受)。但是我用 VLC 看电影还有撕裂就忍不了了。

在 Arch Linux Wiki 的 NVIDIA/Troubleshooting 中介绍了画面撕裂的解决办法。据报道,启用 Full Composite Pipeline 可能会降低 OpenGL 的性能,和可能让 WebGL 出现问题。但我觉得还是看电影不撕裂更重要一点。:-p

解决方法

首先安装 nvidia-settings,然后执行 nvidia-settings -query CurrentMetaMode 你会看到类似下面的内容:

  Attribute 'CurrentMetaMode' (Goodspeed-PC:0.0): id=50, switchable=no,
  source=nv-control :: DPY-0: nvidia-auto-select @1440x900 +800+0
  {ViewPortIn=1440x900, ViewPortOut=1440x900+0+0},
  DPY-2: nvidia-auto-select @800x1280 +0+0 {ViewPortIn=800x1280,
  ViewPortOut=1280x800+0+0, Rotation=270}

注意里面的 source=nv-control :: 后面的东西,是我们想要的。

DPY-0: nvidia-auto-select @1440x900 +800+0 {ViewPortIn=1440x900, ViewPortOut=1440x900+0+0}

是我的第一块屏幕。

DPY-2: nvidia-auto-select @800x1280 +0+0 {ViewPortIn=800x1280, ViewPortOut=1280x800+0+0, Rotation=270}

是我的第二块屏幕。(如果你只有一块屏幕,大概不会有第二条)

我们需要在后面的花括号里面加上ForceFullCompositionPipeline = On,看上去就像这样:{ ..., ForceFullCompositionPipeline=On }。然后再用逗号把两个显示(如果有)拼起来,以上面的举例,修改后是这样的:

DPY-0: nvidia-auto-select @1440x900 +800+0 {ViewPortIn=1440x900, ViewPortOut=1440x900+0+0, ForceFullCompositionPipeline=On}, DPY-2: nvidia-auto-select @800x1280 +0+0 {ViewPortIn=800x1280, ViewPortOut=1280x800+0+0, Rotation=270, ForceFullCompositionPipeline=On}

然后执行 nvidia-settings --assign CurrentMetaMode="修改过的"。这样,不出意料的话,就不会有画面撕裂了。

One Reply to “修复 Nvidia 显卡在 GNU/Linux 下的画面撕裂”

  1. 没有深度学习的需求用A卡再好不过了,至少可以用没有什么严重问题的开源驱动。

Comments are closed.