为什么视频撕裂在Linux中是一个问题?


101

十多年来,我已经使用了许多Linux变体(主要是Debian派生)。我尚未看到令人满意地解决的一个问题是水平撕裂或Vsync未能正确实现的问题。

我之所以这样说,是因为我在4台不同显示器,Nvidia / AMD / ATI / Intel显卡的计算机上使用了5种不同的发行版;每次都出现视频撕裂甚至轻微移动的问题。

这是一个大问题,特别是因为即使Windows XP在现代硬件上也没有这些问题。如果有人要使用Linux做任何事情,为什么他们要在进行非CLI的事情时不断出现缺陷?

我猜想,要么很少有开发人员知道此问题,要么足够小心以解决它。我已经尝试了几乎所有的合成器,通常,他们能做的最好的事情就是将问题降到最低,但不能消除。它不应该像与监视器的刷新率同步一样简单吗?OSS社区中是否存在某种政治在阻止任何人提交可解决此问题的代码?

过去,每次我在这个问题上寻求帮助时,要么将其视为极端情况(我很难相信,考虑到我复制问题的次数,这很难解决),或者我得到了可能的解决方案至多将撕裂最小化。


2
您没有提及使用哪个DE。现在,KDE已经流泪了一年左右。
Sparhawk

1
一个人怎么容易复制这个问题?在Debian / Ubuntu / Mint计算机中?
Xen2050

50
XKCD似乎非常适合这里...
Angew

我流泪的经历完全不同。我非常高兴在Linux上玩游戏和看电影。Steam确实使Linux成为了出色游戏的可行平台。我最近一直在玩《巫师2》和《塔洛斯原理》,在大约50个小时的游戏中我还没有看到任何撕扯。Nvidia卡带有Arch上的专有驱动程序。我同意Xen2050的观点,如果为您的构建提供了准确的规格,此问题将更有用。我并不是否认有问题,我只是有一个很好的经验。
迷宫2015年

使用Nvidia合成为我解决了这个问题,那是在2007年我以前使用Nvidia时。尽管不是全屏显示,因为全屏窗口关闭了合成器,它假定您将运行我认为的OpenGL游戏。使用Intel,您是否尝试过在X中设置“设备”部分的“ TearFree”“ true”选项?它使视频RAM使用量增加了一倍,但我认为它将起作用。
Zan Lynx

Answers:


92

这完全是由于X服务器已过时,不适用于当今的图形硬件,并且基本上所有直接视频卡通信都是作为旧的肿核心的扩展(“补丁”)完成的。X服务器没有在用户渲染窗口和显示窗口的屏幕之间提供内置的同步方式,因此内容在渲染过程中发生了变化。这是X服务器的一个众所周知的问题(它具有许多服务器功能和过时的整个模型-子窗口中的事件处理,关于窗口的元数据,用于直接绘制的图形基元...)。窗口小部件工具箱大多希望掩盖所有这些内容,但是由于没有机制可以解决,因此撕裂仍然是一个问题。当您有多张需要不同驱动程序的卡时,还会出现其他问题,

Wayland不太热衷于尝试替换X,但在其内核中支持了时髦的vsync同步,并且被宣传为使每一帧都完美无缺。

如果您快速在Google上搜索“ wayland视频撕裂”,则将找到有关所有内容的更多信息。


38
+1因为“ X是问题,请看Wayland。”严重的话,这是正确的答案。
HalosGhost 2015年

2
@HalosGhost旅途中的传教士:)仍然没有网络会话支持吗?
kagali-san,2015年

3
@ kagali-san我不是说Wayland是完美的(不是)。但这绝对比X好。:)
HalosGhost

8
@ kagali-san:如果您发现与视频撕裂有关的问题与某种程度上相关,那么韦斯顿仅在一年前就将其RDP后端进行了合并。
grawity'2

3
@orion:非常感谢您,此页面现在成为wayland video tearing:P 的#1结果
Tobia Tesan

16

屏幕撕裂的出现主要是由于两个原因-驱动程序不存在,以及缺少与某些窗口管理器的vsync。

至于驱动程序,免费驱动程序和专有驱动程序都支持免费教学合成(nvidia和amd两者)。请注意,例如,在催化剂(fglrx)中启用无裂缝桌面可能会导致帧丢失和滞后,因此通常默认情况下将其禁用。至于开放式驱动程序,默认情况下应启用vsync。因此,可以通过尝试不同的驱动程序并对其进行配置来解决屏幕撕裂的问题。

至于窗口管理器,众所周知,Openbox,Awesome和其他轻量级WMS不支持无撕裂。XFCE(具体来说为xfwm)已在最新版本中对其进行了修复,现在4.11 / 12具有Vsync。大型桌面环境也没有问题,包括GNOME,KDE,Unity和Cinnamon。

如果仍然遇到屏幕撕裂的情况,您可以选择尝试其他合成管理器,例如Compton或Kwin。Kwin是KDE的窗口管理器,我有在XFCE中使用kwin的经验,当它不支持vsync且运行良好时。

因此,这里的解决方案是实验,在driver / wm的一种组合中破坏的东西可以在另一种中使用。我相信,随着开源驱动程序变得更加先进,并且切换到Wayland可能会摆脱Xorg的旧问题,情况将很快得到改善。


5
并不是的。KDE(与Kwin或其他作曲家一起)对NVidia或Intel仍然如泪如荼。
伊万

1
Openbox等可以正常工作-您只需要运行一个单独的合成器即可,例如compton的运行效果非常好。
wingedsubmariner 2015年

1
@wingedsubmariner,当您指的是openbox时,您还指的是fluxbox吗?
2015年

同样,非常有用的提示您注意不同窗口环境中WM的状态。
2015年

@nass绝对。窗口管理器绝不是一个限制因素。
wingedsubmariner 2015年

14

如果您使用的是> = 365.20的nvidia驱动程序,请尝试启用中的“强制完全合成管道”选项nvidia-settings

在此处输入图片说明


nVidia Quadro在Lenovo W520,Fedora 25上运行,并且有效:)
Jerther

4
如果没有这样的选项,请单击窗口底部的“高级设置”,它会显示出来。为什么这个“构图饱满管道”默认不启用..?
拉斯特

1
@Rast因为它曾经有一些性能问题。
Ruslan

顺便说一句,看来至少英特尔驱动程序也提供一个TearFree选项,您可以在相应Device部分中输入此选项。我刚刚尝试过,它给出的结果与nvidia的Full Composition Pipeline非常相似。
罗斯兰'18

我似乎无法获得重新启动时保存的设置,我尝试创建〜/ .xinitrc文件并将“ nvidia-settings --load-config-only&。/ etc / X11 / xinit / xinitrc”放入其中,但是那似乎没有工作
FragmentalStew

9

我在这里流泪了,现在解决了。

阅读了有关Xorg服务器工作原理的(精彩的解释)后,我意识到X服务器会在任意随机时间将窗口更新直接绘制到存储卡上,除非您使用启用了合成的窗口管理器。

启用合成功能后,窗口管理器会将来自不同窗口存储器缓冲区的所有更改汇总在一起,为整个屏幕创建结果图像,并以一张照片的形式将其转储到显示卡中。

大多数现代发行版都有一个合成窗口管理器。KDE的KWin,Gnome的Mutter,肉桂的Muffin,Mate的Marco,XFCE的xfwm等。但是可以禁用合成以节省资源。

在我的情况下,在KDE4中禁用了合成。一旦启用,撕裂就消失了。编辑:我还需要在KWin选项上将VSync策略从“ 自动”更改为“ 重用”屏幕内容,以消除撕裂,正如在此kwin特定的错误报告中所述

驱动程序选项也可能是一个因素。就我而言,默认选项可以正常工作。Arch Wiki拥有有关不同显示卡(例如Intel卡NVIDIA卡)的选项的出色文档。

要检查当前xorg配置中是否启用了选项,可以检查日志。例如,要检查是否启用了DRI:

cat /var/log/Xorg.0.log | grep DRI

1
在XFCE(在Xubuntu上16.04)的合成是默认启用的,但是同步到垂直空白是不是。使用xfwm4-tweaks-settings命令显示tweaker应用程序,并在“合成器”选项卡上找到以上选项。启用它有很大的不同,可以在此处进行检查:vsynctester.com/index.html(在显示动画时打开/关闭该功能)。它并不完美,虽然有一些丢失的帧,但是比关闭时好得多。
karatedog

1

解决方案在这里:Linux Mint 17.3 MATE现在随Compton一起提供

只需转到Desktop Settings-> Windows-> Window Manager并选择Metacity + Compton。而已。

我有AMD视频卡,它可直接用于开源驱动程序。

对于专有的AMD驱动程序,当HTML5视频最大化到全屏时,您可能会看到蓝色,它将填满整个屏幕。要解决此问题,请创建chmod +x以下脚本:

#!/bin/bash
killall compton 2> /dev/null
compton -b --unredir-if-possible

每当您重新启动系统时都运行它,但是不要尝试将其添加到系统中,Startup Applications因为某些原因,它可能会中断启动。


0

在Peppermint Linux中,转到“首选项”>“ Peppermint控制中心”,选择“桌面效果”并启用“启用桌面效果”和“将图形同步到垂直空白”。


0

我正在使用Linux Mint XFCE,这个问题使我很沮丧。我找到了带有英特尔集成显卡的笔记本电脑解决方案,它解决了撕裂问题。对于使用NVIDIA卡的台式机,此技巧无法起作用。但是我只是找到了罪魁祸首。

禁用窗口合成后,我立即感觉到了性能提升。您可以通过以下方法做到这一点:

转到所有设置/窗口管理器调整/合成器,然后禁用整个设置。

请记住,这是特定于发行版的,而我是XFCE的Mint,我不知道如何在其他发行版上找到类似的东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.