Linux 中使用 Nvidia Graphics 时出现屏幕撕裂

Linux 中使用 Nvidia Graphics 时出现屏幕撕裂

我的屏幕撕裂现象很严重,我不知道该如何解决。我很想完全改用 Ubuntu,但这种撕裂现象实在太烦人了。它只存在于基于 Ubuntu 的发行版中(包括 element OS)。在 Manjaro(Arch fork)上,它不会出现撕裂现象。

PC 配置:主板:Aorus Pro Wifi z390 CPU:Intel i7 9700k RAM:32GB GPU:Nvidia 1060 6GB DisplayPort 输出连接到显示器的 HDMI

显示器报告刷新率为 75hz,Ubuntu 显示器设置报告刷新率为 74.97(可以更改为 60hz,但没有帮助)。

答案1

正如评论中所述,我发布了答案。
要解决撕裂问题,请添加以下命令以在启动时运行:
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
为此,您可以搜索“启动应用程序首选项”,然后按添加按钮,将命令粘贴到命令字段(您可以在姓名部分),然后按添加

或者您可以通过以下方式将该命令添加到您的 Crontab:

  • crontab -e在终端上运行。
  • 如果这是您第一次打开 Crontab,系统会要求您选择一个编辑器,例如选择 nano(即数字 1),然后按Enter
  • 将以下行添加到文件末尾:@reboot nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
  • Ctrl使用+保存O并退出。

为了使更改生效,您应该重新启动计算机(两种方法均适用)。


如果执行上述步骤后撕裂问题仍然存在,请执行以下操作:

  • 使用安装 comptonsudo apt install compton compton-conf
  • 按照已经描述的方法之一添加compton在启动时运行。

如果屏幕仍然撕裂:

  • 通过运行以下命令将 compton.conf 添加到 .config 文件夹:touch ~/.config/compton.conf
  • 添加compton --config ~/.config/compton.conf

并重新启动计算机。

致谢: 使用 Nvidia Graphics 修复 Linux 中的屏幕撕裂问题

答案2

另一个答案中已经提到的技巧是选中 NVIDIA X 服务器设置中的“强制完整合成管道”选项。必须为每个显示器选中此选项。您可以使用命令nvidia-settings启动配置 GUI 来执行此操作。如果看不到该选项,您必须先单击“高级...”按钮。选中复选框后,单击“应用”以保存设置。

nvidia-settings 示例

但是,为了在启动时自动运行它,您需要一个命令行来在 crontab 或会话启动中设置这些选项。要获取此命令行,您只需在 GUI 中使用设置当前设置后查询当前设置即可nvidia-settings --query CurrentMetaMode。对于我的双显示器设置,我得到了此输出(格式化以提高可读性):

Attribute 'CurrentMetaMode' (mypcname:0.0): 
id=50, switchable=no, source=RandR :: 
DPY-2: nvidia-auto-select @1920x1080 +0+0
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0,
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}, 
DPY-6: nvidia-auto-select @1920x1080 +1920+0 
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0, 
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}

第三行的所有内容都可以直接复制粘贴到

nvidia-settings --assign CurrentMetaMode=...

命令。因此,对于上面的例子,这将起作用:

nvidia-settings --assign CurrentMetaMode="
DPY-2: nvidia-auto-select @1920x1080 +0+0
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0,
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}, 
DPY-6: nvidia-auto-select @1920x1080 +1920+0 
{
    ViewPortIn=1920x1080, 
    ViewPortOut=1920x1080+0+0, 
    ForceCompositionPipeline=On, 
    ForceFullCompositionPipeline=On
}"

理论上,您可以手动编写这些设置。重要的是部分ForceFullCompositionPipeline=On。但不幸的是,如果不指定显示器的排列,就无法设置该选项。而且手动确定所需的几何坐标有点麻烦。

答案3

对于 ThinkPad W540,我编写了以下脚本:

echo "options nvidia-drm modeset=1" > /etc/modprobe.d/zz-nvidia-modeset.conf
update-initramfs -u
apt-get purge nvidia-*
apt install nvidia-driver-450

首先,您必须运行 telinit 3,然后运行这些命令。重启后,您将获得正常工作的 nvidia 450 驱动程序,并且绝对不会出现撕裂。我在这台古老的笔记本电脑上运行了 Steam 上的 GTA5,并且可以在 1600x900 分辨率下播放(当然所有设置都设置为低)。我已经在 xubuntu 20.04 上检查过了。

相关内容