- 首发:2022-06-16 23:11:48
- 教程
- 8587
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)
正常情况下可以看到丝滑的画面(如上图)。如果产生屏幕撕裂则如下图:
在播放视频的时候也会出现如下图这样的图像撕裂:
更有甚者,在浏览网页的时候,会出现部分图片或者文字卡顿几毫秒停留在原位置的情况,已经滚动了页面但是部分内容没有跟着移动,滚动非常不顺滑,感觉卡顿,这就属于画面撕裂。
判断你使用的硬件
通常来说,画面撕裂的原因可能是因为显卡输出帧的速度比显示器快或者远不及显示器快。
现在的家用显卡低分辨率渲染几年前的游戏都能轻松突破百帧,而很多办公显示器刷新率都是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
查看是否安装成功。
安装后也可用在附加驱动
应用程序查看结果。
设置垂直同步
同样以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卡画面撕裂问题。
更多
解决此问题需要针对相应的硬件来查找配置方法。通常与浏览器自身的设置无关。如果您有疑问可在评论区留言。
谢谢,你写的最详细,也很有效的解决了撕裂问题
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢