笔记本 用户,大多有一顆 Intel 的芯,但是为它安装了Linux的以后,在浏览网页或者拖动窗口的的时候会感觉到不平滑,边缘有时候会明显出现断开的锯齿.

波纹撕裂的原因:

首先能确定的一点就是显示器相对较弱,显卡的速度超过了显示器的最快刷新时间,在显示器只刷新了半幅画面的时候,显卡的下一帧数据已经到来,可怜的显示器开始用新一帧的画面数据刷新后半幅画面,这种不匹配造成了视觉看到时的不适应,轻者产生波纹,重者画面撕裂。

而解决这一问题的办法就是在显卡驱动中打开垂直同步的功能,让显卡等待显示器完整的画完一帧后,再送新的数据过去。

在Linux中显示器相关设置

早年间在CRT显示器的时代,错误的参数配置令一些没有保护电路的显示器冒烟.

  • xrandr 命令可以检测到显示器支持的有效分辨率刷新率及当前状态
  • cvt 命令可以查询指定分辨率有效的扫描频率
> cvt 1600 900

cvt 的结果推荐添加于 /etc/X11/xorg.conf.d/50-monitor.conf 中 如下:

Section "Monitor"
  Identifier "Default Monitor"

  HorizSync 60-100
  VertRefresh 40-60

  Modeline "1600x900_60.00"  118.25  1600 1696 1856 2112  900 903 908 934 -hsync +vsync

EndSection

主要是那行 Modeline

在Linux中显卡驱动相关配置

显示器的分辨率,刷新率准备好以后,下面就可以在 /etc/X11/xorg.conf.d/50-device.conf 中配置显卡。

比如:打开显卡驱动的 垂直同步 功能。

这部分的官方介绍在这里

当然也可以继续往下看

示例配置 /etc/X11/xorg.conf.d/50-device.conf

Section "Device"
  Identifier "Default Device"

  Driver "intel"

  Option "TripleBuffer" "false"
  Option "TearFree" "true"
  Option "Vsync" "true"

EndSection

TearFreeVsync 共同来完成这个垂直同步功能。

具体需要其它的参数选项,可以通过 man intel 来详细查看.

在 man intel 中我们可以看到 Option Vsync 的默认值为 true, 如果是这样可能问题出在了 Intel 显卡驱动的这一个环节.

  1. 显卡驱动默认没有打开 Vsync
  2. 显卡驱动的编译 configure 指定了关闭 Vsync 的参数

好了,问题的根源的就不多想了,有这些问题已经可以解决了.

最后的步骤

> init 3
> init 5

重启 X11 服务后, 再次拖动窗口或者打开firefox滚动网页时再也不会有裂痕了.问题完美解决.

结语

上面的流程适用于一切显卡显示器的配置,为啥以 Intel 为例,却不写 Nvidia 和 AMD 的显卡捏,原因是 Nvidia 有 G-SYNC; AMD 有 FreeSync 这两项技术显卡可控制显示器的刷新率与显卡相同,可大幅减少画面撕裂,且更流畅。


支付宝打赏 微信打赏

您的打赏是对我最大的鼓励!

linzhanyu


Linux, VIM, OpenGL, OpenCL.

Python, C++, C#, ML.

相看莫相笑,同是竹林人。