轶哥

📚 Having fun with AI Agent. Always learning.

解决Ubuntu画面撕裂
  •   更新:2022-06-16 23:11:48
  •   首发:2022-06-16 23:11:48
  •   教程
  •   5796

Ubuntu屏幕画面撕裂非常常见的问题。其实不光Ubuntu,只要是Linux系统都可能存在这个问题。以下解决方法在Debian、Linux Mint、Kali等不同发行版Linux通用。

这里顺带说明一下,Ubuntu 20.04、22.10、22.04、18.04都可能存在图像撕裂这个问题,从原理上来说,这个问题是无法通过升级系统或安装更新的驱动程序来解决的。因此解决此问题也需要根据不同情况对症下药。

画面撕裂的问题有可能跟Intel核芯显卡、Nvidia显卡、AMD显卡有关系,因此你需要先知道自己使用的设备搭载了哪款显卡。

特地说明一下,虽然画面撕裂在网页和游戏中最为明显,在视频中也会有体现,但是Chrome和Firefox并未对Linux下的N卡适配硬件加速。也就是说,网页中播放视频CPU利用率高的问题和画面撕裂是两个问题,默认从官网下载的Chrome和Firefox并不支持GPU加速。解决画面撕裂和开启N卡A卡硬解无关。

检测是否存在画面撕裂

通过上面的视频可以测试是否存在画面撕裂的问题。

(视频来自:https://www.youtube.com/watch?v=MfL_JkcEFbE)

UbuntuTearingtest.png

正常情况下可以看到丝滑的画面(如上图)。如果产生屏幕撕裂则如下图:

UbuntuTearing.png

在播放视频的时候也会出现如下图这样的图像撕裂:

UbuntuTearingvideo.png 更有甚者,在浏览网页的时候,会出现部分图片或者文字卡顿几毫秒停留在原位置的情况,已经滚动了页面但是部分内容没有跟着移动,滚动非常不顺滑,感觉卡顿,这就属于画面撕裂。

判断你使用的硬件

通常来说,画面撕裂的原因可能是因为显卡输出帧的速度比显示器快或者远不及显示器快。

现在的家用显卡低分辨率渲染几年前的游戏都能轻松突破百帧,而很多办公显示器刷新率都是60Hz,虽然144Hz、240Hz甚至更高的高刷游戏显示器现在也很常见,但是拿Linux玩游戏的毕竟是少数。即便可以通过更换显示器获得丝滑的效果,但不玩游戏大可不必。

开启垂直同步可以解决一部分画面撕裂的问题。在不玩游戏的情况下,开启垂直同步不会有肉眼可见的弊端,对功耗的影响也是微乎其微的。

查看当前加载的显卡:

lspci -nn|egrep -i "display|3d|vga|graphics"

通过设置可以开启Intel集显、AMD集显、N卡、A卡的垂直同步功能。但是在开启之前,可以先检查一下显示器是否支持NVIDIA的G-GYNC或者AMD的FreeSync技术。如果显示器支持的话,更新最新版本的驱动程序开启即可。

除了开启垂直同步,N卡大部分情况还需要开启Force full composite pipeline才可以彻底解决画面撕裂的问题。

此外,对应Linux的窗口管理器也可以更新到新版本,以支持对画面撕裂的处理。例如窗口管理器KWin可以启用三重缓冲triple buffering或者配置__GL_YIELD="USLEEP"的环境变量使得GPU等待当前图像完成渲染(Wait for the GPU to fully display current image)。

更新显卡驱动到最新版

根据您使用的显卡,安装其对应的最新驱动程序是必须的。(否则您在期待什么呢?没有显卡驱动的加持必然是各种显示异常)

这里简单介绍一种快捷高效的Ubuntu中Nvidia独显驱动的安装方法,其余硬件安装和更新显卡驱动的方法不再赘述。

  • 列出可用驱动:ubuntu-drivers devices
  • 安装最佳驱动: ubuntu-drivers autoinstall

重启后执行nvidia-smi查看是否安装成功。

UbuntuN%E5%8D%A1.png

安装后也可用在附加驱动应用程序查看结果。

设置垂直同步

同样以N卡为例,再附上一个Intel核显的配置方法。其他显卡搜索其对应的垂直同步设置方法即可,解决问题的思路是完全一致的。

N卡设置垂直同步

通常的方法是,用root权限编辑/lib/modprobe.d/nvidia-graphics-drivers.conf文件,添加options nvidia-drm modeset=1,然后通过sudo update-initramfs -u更新内核。但是这个方法在内核更新后就会失效,后续维护起来比较麻烦。

这里介绍一个更简单的方法,我们把垂直同步的配置项写到GRUB里面,作为内核参数去启动系统。

以root权限编辑/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT的内容最后添加nvidia-drm.modeset=1。如果你没有添加过其他启动参数,那么这行内容它看起来应该类似这样:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"

保存文件并执行sudo update-grub更新到grub配置。

重启后N卡垂直同步设置即可生效。

Intel核显设置垂直同步

使用第一步提到的lspci -nn|egrep -i "display|3d|vga|graphics"查看有Intel Graphics,则可以创建配置文件开启垂直同步。以X11下xorg为例。

创建目录:

sudo mkdir /etc/X11/xorg.conf.d

创建文件/etc/X11/xorg.conf.d/20-intel.conf

Section "Device"
Identifier  "Intel Graphics"
Driver      "intel"
Option      "TearFree"    "true"
EndSection

重启。

N卡开启 Force full composite pipeline

正常情况可以在使用了xrandr的设备运行下述命令开启(注意,下文弃用了此方法):

nvidia-settings --assign CurrentMetaMode="$(xrandr | sed -nr '/(\S+) connected (primary )?([0-9]+x[0-9]+)(\+\S+).*/{ s//\1: \3 \4 { ForceFullCompositionPipeline = On }, /; H}; ${ g; s/\n//g; s/, $//; p }')"

然而现在我们有更好的办法,在~/.config/autostart中新建nvidia-force-full-compositon.desktop文件:

[Desktop Entry]
Type=Application
Name=nvidia-force-full-compositon
Exec=nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

开机后自动完成对N卡Force full composite pipeline的配置。

完成此步骤后重启,即可解决N卡画面撕裂问题。

更多

解决此问题需要针对相应的硬件来查找配置方法。通常与浏览器自身的设置无关。如果您有疑问可在评论区留言。

打赏
交流区(1)
My Android 3

谢谢,你写的最详细,也很有效的解决了撕裂问题

2023年11月26日 09:28回复
尚未登陆
发布
  上一篇 (新版本Safari无法正常访问Bilibili等网站的解决办法)
下一篇 (如何安装Xcode 14 Beta?)  

评论回复提醒