wsl2-解决高分辨率屏的模糊问题
上一级页面:wsl2配置使用gui
前言
修复高分辨率屏的模糊问题
为 X server 可执行文件启用高 DPI 设置。
在Windows端,可以通过设置x server的启动参数来启动高DPI设置,
关闭该X server
的任何正在运行的实例。
打开您安装X server
的文件夹,X server
的实现非常多,例如VcxSrv
,Xming
,X410
等。
在这里,我选择VcxSrv
作为例子。打开vcxsrv
安装文件夹,
右键单击vcxsrv.exe
。
选择“属性”-->“兼容性”选项卡-->更改高 DPI 设置-->启用覆盖高 DPI 缩放-->更改为“应用程序”(或“系统增强”选项)。
更改如下:
同理,右键单击xlaunch.exe
,进行相同的设置。
选择“属性”-->“兼容性”选项卡-->更改高 DPI 设置-->启用覆盖高 DPI 缩放-->更改为“应用程序”(或“系统增强”选项)。
打开注册表编辑器regedit
进入HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
分别更改两个字符串值,更改如下图:
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"path\\to\\xlaunch.exe"="~ HIGHDPIAWARE"
"path\\to\\vcxsrv.exe"="~ HIGHDPIAWARE"
wsl端设置x11的DPI,以修复高分辨率模糊问题
参考HiDPI (简体中文) - ArchWiki (archlinux.org)
wsl端设置X11环境参数,修复高分辨率屏的模糊问题
如果你没有使用一个桌面环境,比如 KDE,Xfce,或是没有一个为您操作 Xorg 设置的程序,
你可以通过在 Xresources 中的 Xft.dpi
变量手动修改DPI设置。
具体过程如下:
x-org自动获取DPI
首先xorg会自动获取dpi,
- 注意,这里x org想要正确获得你的显示器信息,需要先按照上一小节的设置,在Windows端,为 X server 可执行文件启用高 DPI 设置。
xdpyinfo | grep -B 2 resolution
dots per inch
就是dpi
,这里PPI可以看作DPI
screen #0:
dimensions: 1920x1080 pixels (339x191 millimeters)
resolution: 144x144 dots per inch
这里的1920x1080
就是自动获取的分辨率,如果按照前文教程,正确设置x server
,这里就能够正确获取到电脑的分辨率。
给出的输出可能不准,x org自动计算出的结果为144
获取主机的实际DPI
可以通过The Best Notebooks with the Best Displays - NotebookCheck.net Reviews获取你电脑的DPI
或者通过计算器可以计算:如何获取电脑的dpi-ppi
我通过上面文章的链接,计算得出我的DPI数值为157.35
按照Windows的推荐设置,可以取100
、125
、150
、175
……
157.35
离150
最近,所以结果为150
HiDPI 显示器的推荐DPI
在 HiDPI 显示器上,通常可以设为180或者192
最终结果
建议把前文的144,150,180,192挨个试一遍,保留你想要的结果。
具体配置过程见wsl2-x11-环境变量配置
结果如下:
Xft.dpi: 144
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb
此外还需要确保设置在X client
启动时,~/.Xresources
能够被载入,
不能使用xinit
,wsl端没有xinit
。。因为xinit
是x server
自带的组件。而x server
运行在windows端,(与之相对的,x client
运行在wsl端)
我们可以手动载入Xresources
。
配置文件见wsl2-x11-环境变量配置
概括来说,在类似于~/.zshrc
的配置文件中,填写下面的设置:
# xterm/dpi设置
if [ -f $MY_CONF/.Xresources ]; then
xrdb -merge -I$HOME $MY_CONF/.Xresources
fi
$MY_CONF
是自己设置的一个环境变量,指向自己存放.Xresources
的目录。
Xresources
通常会让大多数地方的字体大小正确,但这并不会影响图标大小。
注:在设置Xft.dpi
的同时,设置 GUI toolkit 缩放(例如下文提及的GDK_SCALE
),可能导致某些程序界面元素过大(例如firefox)。
更多详细信息,请参阅 Xresources。
设置字体的抗锯齿等功能
设置好默认字体,并且设置字体的antialiasing
和hinting
两个参数,
可以通过font-manager
或者gnome-tweak
等应用程序来设置,
gnome-tweak:
font-manager
更多详细内容见linux-如何添加字体
设置目标DPI
前文最终计算结果为dpi: 144
,
所以这一节,将字体的目标DPI(target dpi)设置为144
可以通过font-manager
或者gnome-tweak
等应用程序来设置,
覆盖应用程序的默认环境设置
这些GTK+参数和QT6参数,应当由应用程序开发者指定,用户不应手动覆盖和调整它们。建议跳过。
覆盖 X11 环境的 GTK+ 设置。
这里有官方文档:HiDPI (简体中文) - ArchWiki (archlinux.org)
GDK_SCALE
将按特定因素缩放窗口GDK_DPI_SCALE
将缩放 DPI 以用于缩放感知应用程序。**
GDK_SCALE=0.5
要将UI缩放为0.5倍大小:GDK_SCALE=1
要将UI缩放为1倍大小:GDK_DPI_SCALE * GDK_SCALE
表示字体的缩放倍数
例如:0.5 * 2 = 1
表示字体缩放为1倍大小
GDK_SCALE=2
GDK_DPI_SCALE=0.5
具体配置过程见wsl2-x11-环境变量配置
类似于下面的设置:
export GDK_SCALE=2
export GDK_DPI_SCALE=0.5
QT5配置
自从 Qt 5.6 开始,Qt 5 应用程序可以遵守屏幕DPI。设置环境变量QT_AUTO_SCREEN_SCALE_FACTOR=1
以启用这项功能。
但你也可以按屏幕(QT_SCREEN_SCALE_FACTORS
)或全局(QT_SCALE_FACTOR
)手动设置缩放,有关详细信息,请参阅:
具体配置过程见wsl2-x11-环境变量配置
类似于下面的设置:
export QT_AUTO_SCREEN_SCALE_FACTOR=1
现在重启你的 X server和 X11 程序(直接重启PC系统)
参考、引用、致谢
What should/shouldn't go in .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?
zsh的环境变量的加载.zprofile .zlogin .zshrc .zshenv – Vincent Blog (xsudo.com)