WSLg 较好的 HiDPI 方案

1 minute read

Published:

知乎

  • 渲染流程
    程序–>weston
    程序–>xwayland–>weston

  • 最好的方案是程序自身知道 HiDPI 的缩放比例, 可以自行放大字体, 自行选择高分辨率的图片, 会更清晰

  • 稍差的方案是由渲染器来缩放, 对 WSLg 是 weston

以下方案不涉及多显示器

环境变量放入 ~/.bash_profile

Weston Scale

输出时强制放大 很可能模糊
WSLg 的 Weston Wayland 合成器自带缩放
修改或创建 %USERPROFILE%\.wslgconfig 比如 C:\Users\User1\.wslgconfig
下面的配置是 150% 缩放1, 详情可看WSLg配置文档2

  [system-distro-env]
  ;hi-dpi
  WESTON_RDP_HI_DPI_SCALING=true
  WESTON_RDP_FRACTIONAL_HI_DPI_SCALING=false
  ;100 to 500
  WESTON_RDP_DEBUG_DESKTOP_SCALING_FACTOR=150

如果用了此方法 下面的方法都别用

Qt 5/6

  • 首选 wayland 其次 x113
  • 效果比较好, 唯一的问题是标题栏无法缩放
      export QT_QPA_PLATFORM="wayland;xcb"
      export QT_AUTO_SCREEN_SCALE_FACTOR=0
      export QT_ENABLE_HIGHDPI_SCALING=0
      export QT_SCALE_FACTOR=1.5
    

Gtk 3/4

  • Gtk3 和 Gtk4 都是首选 wayland 的, 而 GDK_SCALE 在 wayland 中是无效的
  • GDK_SCALE 控件字体全部按比例扩大, 但只支持整数
  • GDK_DPI_SCALE 似乎只改了字体大小, 控件是被字体撑大的, 只有图标的按钮就没有扩大, 比如窗口关闭按钮, 而且标题栏无法缩放4
  • GDK_DPI_SCALE 在 1.5 及以下效果还行, 2 的效果比较差
      export GDK_DPI_SCALE=1.5
    

XWayland

针对 GTK2 程序和 xcalc 之类, 理论对 Intellj 的 IDE 有效5.
安装 xrdb 比如 pacman -S xorg-xrdb 6.
创建 ` ~/.Xresources` 文件, 内容如下, 其中 144=96*1.5 其他缩放比例可以按此计算7.

  Xft.dpi: 144

~/.bash_profile 加入:

  xrdb -merge ~/.Xresources

重要提示
当 Qt5/6 或 Gtk3/4 程序后端使用 X11 时, 此 DPI 设定也对这些程序有效, 而加上已设定的QT_SCALE_FACTOR=1.5GDK_DPI_SCALE=1.5, 最终会变成 2.25 倍放大.

References 参考链接