我已经安装了 Manjaro Linux。我的显卡是 Nvidia GTX 1050Ti。
当我启动计算机并尝试观看视频时,我注意到屏幕严重撕裂。当我转到 Nvidia X 服务器设置并启用选项“强制完整组合管道”时,此问题得到解决。
有没有办法永久设置此选项,以便我不必每次重新启动计算机时手动启用它?
答案1
我的笔记本电脑配备了 Quadro K2100M,运行 Ubuntu Bionic 和 KDE Plasma 5.17(来自霓虹灯回购)并使用nvidia-driver-430
.
由于我在家里和工作时对显示器有一组不同的配置,因此我需要一些动态的东西,以下是对我有用的东西:
我编写了以下脚本来处理屏幕的动态配置(
~/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
- 我将该脚本添加到自动启动中:
chmod +x ~/bin/force-composition-pipeline.sh ln -s ~/bin/force-composition-pipeline.sh ~/.config/autostart-scripts/
- 在 KDE Plasma 设置中,显示与监控->合成器,我设置了防止撕裂(“垂直同步”)到绝不。
请注意,我发现非完整ForceCompositionPipeline
对我来说已经足够了。
答案2
添加到 Paradox 的答案(因为我似乎无法发表评论......),我会将该命令放在 ~/.bash_profile 而不是 ~/.bashrc 中。
每次打开新的 bash 会话(即每次打开新的终端仿真器窗口/选项卡)时都会获取 ~/.bashrc。
另一方面,当您将 bash 作为登录 shell 启动时,例如,当您登录图形桌面环境时,~/.bash_profile 仅获取一次。比照https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files
编辑:现在有一个更好的解决方案来解决使用 nvidia 专有驱动程序时 KWin 的撕裂问题;你需要有足够新的 kwin 版本,版本 >= 5.12 [1]和启用 nvidia-drm 内核模块的模式设置 [2]。我对此进行了测试,它适用于 kwin-5.17.80(来自 openSuse 存储库的 git 快照)和 nvidia 440.26。
编辑:嗯,使用 nvidia-drm 模块启用模式集有副作用,从挂起恢复似乎失败......
编辑(再次):看起来即使没有使用 nvidia-drm 模块启用模式集,撕裂似乎也消失了,至少现在......
[1]https://wiki.archlinux.org/index.php/NVIDIA/Troubleshooting#Avoid_screen_tearing_in_KDE_(KWin) https://phabricator.kde.org/D19867
[2]https://wiki.archlinux.org/index.php/NVIDIA#DRM_kernel_mode_setting
答案3
您可以设置“强制完整组合管道" 终端中的选项,如下所示:
$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
要自动执行此操作,最简单的方法是将其放入您的.bashrc
.要继续,只需在终端中输入以下内容:
$ echo "$ nvidia-settings --assign CurrentMetaMode=\"nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }\"" >> ~/.bashrc
您可以注销并重新登录(或重新启动)以应用此功能。请注意,由于“自动选择”,这意味着仅是一个显示器解决方案。
另一种方法是在内部执行相同的操作~/.nvidia-settings-rc
,但行为可能会随着时间的推移而改变,而在 中.bashrc
,您可以确定它是如何完成的。
附录
关于屏幕撕裂,您可能想尝试其他调整。
由于您使用的是 Manjaro,我假设您使用的是 KDE。您可以告诉窗口管理器 (KWin) 使用三重缓冲或等待当前图像显示后再更新屏幕。
1)等待GPU完全显示当前图像
# echo "export __GL_YIELD=\"USLEEP\"" >> /etc/profile.d/kwin.sh
2) 在KWin中启用三重缓冲
# echo "export KWIN_TRIPLE_BUFFER=1" >> /etc/profile.d/kwin.sh
请勿同时启用以上两项。nvidia-settings
如果您在 KWin 中启用三重缓冲,请务必启用三重缓冲。
答案4
对于单显示器:
创建一个文本文件并粘贴以下内容:
[Desktop Entry]
Type=Application
Name=nvidia-force-full-compositon
Exec=nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
对于双显示器:
如果您有双显示器,您可以在文本编辑器中打开此文件:/etc/X11/xorg.conf
然后使用 ctrl+F 搜索此单词metamodes
并查看其配置内容。我的是这样的:
"metamodes" "DVI-I-0: nvidia-auto-select +1920+0 {ForceCompositionPipeline=On}, HDMI-0: nvidia-auto-select +0+0
所以我创建了这样的 destop 条目:
[Desktop Entry]
Type=Application
Name=nvidia-force-full-compositon
Exec=nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +1920+0 {ForceCompositionPipeline=On}, nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
注意:您可以仅执行 ForceFullCompositionPipeline 或 ForceCompositionPipeline。只需根据需要更改文本即可。
将文本文件保存为如下所示:
nvidia-force-full-compositon.desktop
哪里.desktop
是必不可少的。
现在将其复制粘贴到~/.config/autostart
重启。