Rav*_*ine 117 linux graphics composite monitors
十多年来,我已经使用了许多 Linux 变体(主要是 Debian 衍生版)。一个我还没有看到满意解决的问题是水平撕裂的问题,或者没有正确实现 Vsync。
我这么说是因为我在 4 台不同的计算机上使用了 5 种不同的发行版,这些计算机具有各种显示器和 Nvidia/AMD/ATI/Intel 显卡;每次都会出现视频撕裂甚至轻微运动的问题。
这是一个大问题,尤其是因为即使是 Windows XP 在现代硬件上也没有这些问题。如果有人打算将 Linux 用于任何事情,为什么他们希望在做任何非 CLI 的事情时不断出现缺陷?
我猜要么很少有开发人员知道这个问题,要么足够关心来解决它。我已经尝试了几乎所有的合成器,通常他们能做的最好的事情就是尽量减少问题,但不能消除它。不应该和显示器的刷新率同步这么简单吗?OSS 社区中是否有一些政治因素阻止任何人提交修复此问题的代码?
过去每次我就这个问题寻求帮助时,它要么被视为边缘情况(我发现很难相信这是我复制问题的次数),要么我得到了潜在的解决方案最多减少撕裂。
ori*_*ion 107
这都是因为 X 服务器已经过时,不适合当今的图形硬件,并且基本上所有的直接显卡通信都是作为对古老臃肿核心的扩展(“补丁”)完成的。X 服务器没有提供用户渲染窗口和显示窗口的屏幕之间的内置同步方式,因此内容在渲染过程中发生变化。这是 X 服务器的众所周知的问题之一(它有许多服务器功能的完整模型并且已经过时 - 子窗口中的事件处理、关于窗口的元数据、用于直接绘制的图形基元......)。小部件工具包大多想掩盖所有这些,但撕裂仍然是一个问题,因为没有机制来处理它。当您有多个需要不同驱动程序的卡时会出现其他问题,
Wayland 有点不情愿地试图取代 X,它在其核心支持迂腐的 vsync 同步,并宣称每一帧都完美无缺。
如果您在谷歌上快速搜索“wayland 视频撕裂”,您会找到有关所有内容的更多信息。
Fuz*_*ree 26
如果您使用的是 nvidia 驱动程序 >= 365.20,请尝试在nvidia-settings.
kir*_*l-a 18
屏幕撕裂的出现主要是由于两个原因 - 尚未出现的驱动程序,以及某些窗口管理器缺乏垂直同步。
至于驱动程序,免费和专有驱动程序都支持自由撕裂合成(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 的旧问题。
Dav*_*vid 11
我在这里有强烈的撕裂感,现在已经解决了。
在阅读了有关 Xorg 服务器如何工作的这篇(精彩的解释)后,我意识到 X 服务器会在任何随机时间将窗口更新直接绘制到存储卡,除非您使用启用了合成的窗口管理器。
启用合成后,窗口管理器将来自不同窗口内存缓冲区的所有更改放在一起,为整个屏幕创建一个结果图像,并在一次拍摄时将其转储到显示卡。
大多数现代发行版都有一个合成窗口管理器。用于 KDE 的 KWin、用于 Gnome 的 Mutter、用于 Cinnamon 的 Muffin、用于 Mate 的 Marco、用于 XFCE 的 xfwm 等。但是可以禁用合成以节省资源。
在我的情况下,KDE4 中禁用了合成。一旦启用,撕裂就消失了。编辑:我还需要将 KWin 选项的 VSync 策略从自动更改为重用屏幕内容,以消除撕裂,正如此kwin 特定错误报告中所述。
驱动程序选项也可能是一个因素。在我的情况下,默认选项工作正常。Arch Wiki 有关于不同显示卡(如Intel 卡或NVIDIA 卡)选项的大量文档。
要检查您当前的 xorg 配置中是否启用了某个选项,您可以检查日志。例如,检查 DRI 是否启用:
cat /var/log/Xorg.0.log | grep DRI
Run Code Online (Sandbox Code Playgroud)