Logs | Linux 桌面的分数缩放
分数缩放是什么?
分数缩放是按照一个分数比例 (e.g. 1.5 倍) 对屏幕上内容的大小进行整体放大 (真的有人缩小吗?) 的操作. 在 Wayland 下主要用下面这种方式实现分数缩放
混成器将缩放比例上采样至整数倍 (e.g. 1.5 -> 2.0), 然后由混成器进行降采样. 在多屏多 DPI 的配置下, 混成器可能会将应用缩放比例设为缩放最大的显示器后将它降采样.
这种缩放方式初看可能很好, 但也引发了一个巨大的问题: 超采样产生的性能问题如何? 多渲染的像素和混成器降采样的浪费功耗总不会无端消失吧? wp-fractional-scale-v1
就因此诞生了.
分数缩放的工作情况
混成器
常用桌面环境的混成器都支持了 wp-fractional-scale-v1
. GNOME/mutter 需要手工更改 dconf 键值 /org/gnome/mutter/experimental-features
为 scale-monitor-framebuffer
, 方能启用分数缩放支持.
应用
GTK
GTK 3
GTK 3 截至目前没有支持分数缩放的计划, 只能使用整数缩放再降采样的方法实现 分数缩放.
GTK 4
GTK 4 4.13.5 开始默认启用了新的 ngl
渲染后端, 宣称它具有更好的分数缩放.
目前, 作者已经测试了 ngl
renderer 在 分数缩放下的表现. 测试的 GTK 4 版本如下:
1 | paru -Q gtk4 libadwaita |
新的 ngl
渲染器在处理分数缩放上的确有极大改进, 但还是存在以下几个问题: Modal Dialog 下的主窗口模糊, GNOME Screenshot 截图模糊以及渲染图像损坏.
![Render Corruption](Screenshot from 2024-03-01 23-10-04.webp)
Qt 5
Qt 5 截至目前没有支持分数缩放的计划, 只能使用整数缩放再降采样的方法实现 分数缩放.
Qt 6
Qt 6 实现了完整的分数缩放支持, 默认启用. 然而, QtWebEngine 会呈现出字体像素画的渲染错误 (KMail). 请使用如下环境变量禁止分数缩放:
1 | QT_SCALE_FACTOR_ROUNDING_POLICY=RoundPreferFloor |
Telegram
Telegram Desktop 由 Qt6 构建, 但分数缩放需要手动开启. 前往 Settings > Advanced > Experimental Settings, 启用 Enable precise High DPI scaling. 然而, 这将会导致应用内所有图标和图片像素化.
![Pixelation](Screenshot from 2024-03-03 12-06-52.webp)
Chromium
Chromium 支持 wp-fractional-scale-v1
. 拓展菜单显示不全的问题似乎在 122 之后得到了解决.
Firefox
Firefox 需要前往 about:config
中启用 widget.wayland.fractional-scale.enabled
. 需要注意的是, Hamburger Menu 等菜单会出现显示不全的问题, 不建议启用.
![Menu cutoff](Screenshot from 2024-03-03 12-19-12.webp)
总结
Linux 上的分数缩放进展确实在日渐完善, 且已经比混乱的 Windows 和只能整数缩放降采样的 macOS 要好上不少. 然而, XWayland HiDPI 和 Firefox 仍是两大痛点. 希望有朝一日这篇文章能得到更新.