如何为 Nvidia GPU 驱动程序自动强制完整组合管道?

Dan*_*drd 6 nvidia gpu manjaro proprietary-drivers

我已经安装了 Manjaro Linux。我的显卡是 Nvidia GTX 1050Ti。

当我启动计算机并尝试观看视频时,我注意到屏幕撕裂严重。当我转到 Nvidia X 服务器设置并启用“强制完整合成管道”选项时,此问题得到解决。

有没有办法永久设置这个选项,这样我就不必每次重新启动计算机时都手动启用它?

小智 7

我的笔记本电脑配备了 Quadro K2100M,运行带有 KDE Plasma 5.17(来自neon repo)的Ubuntu Bionic并使用nvidia-driver-430.

由于我在家中和工作中的显示器有一组不同的配置,我需要一些动态的东西,这对我有用:

  1. 我编写了以下脚本来处理屏幕的动态配置 ( ~/bin/force-composition-pipeline.sh):

    #!/bin/bash
    s="$(nvidia-settings -q CurrentMetaMode -t)"
    
    if [[ "${s}" != "" ]]; then
      s="${s#*" :: "}"
      nvidia-settings -a CurrentMetaMode="${s//\}/, ForceCompositionPipeline=On\}}"
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我将该脚本添加到自动启动:
    chmod +x ~/bin/force-composition-pipeline.sh
    ln -s ~/bin/force-composition-pipeline.sh ~/.config/autostart-scripts/
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 KDE Plasma 设置中,在Display and Monitor -> Compositor 中,我将防撕裂(“vsync”)设置Never

请注意,我发现非满ForceCompositionPipeline对我来说已经足够了。

  • 太感谢了!我一直在寻找这个自动解决方案大约一年多了...... (2认同)

Par*_*dox 2

您可以在终端中设置“强制完整组合管道”选项,如下所示:

$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
Run Code Online (Sandbox Code Playgroud)

要自动执行此操作,最简单的方法是将其放入您的.bashrc. 要继续,只需在终端中输入以下内容:

$ echo "$ nvidia-settings --assign CurrentMetaMode=\"nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }\"" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

您可以注销并重新登录(或重新启动)以应用此功能。请注意,由于“自动选择”,这意味着仅是一个显示器解决方案。

另一种方法是在内部执行相同的操作~/.nvidia-settings-rc,但行为可能会随着时间而改变,而在 中.bashrc,您可以确定它是如何完成的。

附录

关于屏幕撕裂,您可能想尝试其他调整。

由于您使用的是 Manjaro,我假设您使用的是 KDE。您可以告诉窗口管理器 (KWin) 使用三重缓冲或等待当前图像显示后再更新屏幕。

1)等待GPU完全显示当前图像

# echo "export __GL_YIELD=\"USLEEP\"" >> /etc/profile.d/kwin.sh
Run Code Online (Sandbox Code Playgroud)

2) 在KWin中启用三重缓冲

# echo "export KWIN_TRIPLE_BUFFER=1" >> /etc/profile.d/kwin.sh
Run Code Online (Sandbox Code Playgroud)

请勿同时启用以上两项。如果您在 KWin 中启用三重缓冲,请务必nvidia-settings启用三重缓冲。