wsl2 x11环境变量配置
上一级页面:wsl2配置使用gui
前言
WSL端需要做两个工作:
- 设置DISPLAY变量
- 配置字体等GUI相关的设置
接下来给出WSL端详细配置过程
因为wslg是在nologin
状态下使用的,配置x11 client(x client)时,应当写在全局的shell env文件中(所有用户适用
、非shell环境适用
),对应zsh是/etc/zsh/zshenv
,
配置ZDOTDIR
# /etc/zsh/zshenv
# 我在这个文件夹($HOME/.zsh/wsl2)中储存 .zshenv .zshrc .zprofile等
ZDOTDIR=$HOME/.zsh/wsl2
配置代理地址:$HOST_SERVER
由于WSL 2使用虚拟机,其IP和Windows不同,所以需要进行一些特殊设置。
$HOST_SERVER
是手动设置的一个环境变量,用于获取主机地址
更改配置文件
vim $ZDOTDIR/.zshenv
- 如果你使用bash,修改
/etc/environment
(bash的环境变量配置文件),添加全局的环境变量
$HOST_SERVER
具体设置如下
# 如果安装了Docker for Windows,且启动了WSL 2后端集成,
# linux/windows/git-bash/wsl2,使用docker提供的内置服务器host.docker.internal
# export HOST_SERVER=http://host.docker.internal
# only-WSL2,使用wsl2的服务来获取IP
export HOST_SERVER=$(grep -oP '(?<=nameserver\ ).*' /etc/resolv.conf)
#设置代理端口,具体的端口视你电脑本地的代理软件(Shadowsocks、Clash等)而异
export PROXY_PORT=7890
#设置代理地址
export PORXY_ADDR="http://${HOST_SERVER}:7890"
配置Xresources
$ZDOTDIR/.Xresources
是x server的一些参数设置,由于xserver安装在windows端,而在wsl端没有server自带的xinit,所以需要手动应用Xresources
,见$ZDOTDIR/.x11
的第二段
vim $ZDOTDIR/.Xresources
Xft.dpi: 96
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb
x11配置
wsl2 xclient(注意 xserver在 windows端)并不只是从shell启动,还可能通过图形界面启动,所以应当配置为非shell环境适用
。并且配置不能只在login时生效一次,所以不能放在profile。
wslg是nologin启动的,并不经过shell,所以需要在全用户适用
、非shell环境适用
的配置文件中进行配置。
更改配置文件
vim $ZDOTDIR/.zshenv
- 如果你使用bash,修改
/etc/environment
(bash的环境变量配置文件),添加全局的环境变量
指定DISPLAY
和DBUS_SESSION_BUS_ADDRESS
,用于wsl和windows进行正常的通信
- $HOST_SERVER是前文设置的代理地址
# ===========设置x server==============
# 由于wsl2的x server在Windows端,
# x server并不只是包含 shell,它还要应用在图形界面,所以不能放在 sh rc文件里
# 并且可能会出现切换一个新的shell,然后运行x server,就是说它的配置不能只在login时生效一次,所以不能放在profile
# 所以只能放在`/etc/zsh/.zshenv`
# =================================
# 设置下面的"地址"替换为之前记住的Windows上的X Server的地址,一般是0.0
# DISPLAY环境变量用来指定X Server的地址。
export DISPLAY="$HOST_SERVER:0.0"
# 设置DBUS_SESSION,与X server通信,以使用输入法
if test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval $(dbus-launch --sh-syntax)
fi
# 修复screen创建目录的权限问题
export SCREENDIR=$HOME/.screen
设置dpi和缩放,修复高分辨率屏的字体模糊
# =================================
# 设置dpi和缩放
# =================================
#export GDK_SCALE=1
#export GDK_DPI_SCALE=1
# 需要关闭qt自动缩放,才能使用下面两项QT_SCREEN_SCALE_FACTORS QT_SCALE_FACTOR
#export QT_AUTO_SCREEN_SCALE_FACTOR=1
# 设置多个屏幕的缩放系数,该参数的值采用分号";"组合的键值对表示,分别表示屏幕1;屏幕2;屏幕...
#export QT_SCREEN_SCALE_FACTORS=2;1
# 全局缩放系数,多个屏幕用统一的缩放系数
#export QT_SCALE_FACTOR=1
# x server/x term/dpi
if [ -f $ZDOTDIR/.Xresources ]; then
xrdb -merge -I$HOME $ZDOTDIR/.Xresources
fi
设置个性化设置
# ====================
# 设置个性化设置
# ====================
# fcitx 输入法
export INPUT_METHOD=fcitx # wayland输入法
export GTK_IM_MODULE=fcitx # gtk 输入法
export QT_IM_MODULE=fcitx # qt 输入法
export XMODIFIERS=@im=fcitx # x11输入法
export DefaultIMModule=fcitx # 默认输入法
设置输入法的自启动
# 设置fcitx自启动
fcitx-autostart &>/dev/null
不使用间接渲染--unset LIBGL_ALWAYS_INDIRECT
更改配置文件
vim $ZDOTDIR/.zshenv
- 如果你使用bash,修改
/etc/environment
(bash的环境变量配置文件),添加全局的环境变量
# if set to`true`(1), forces an indirect rendering context/connection
# 如果设置为true,强制indirect rendering 上下文/连接
unset LIBGL_ALWAYS_INDIRECT
参考、引用、致谢
What should/shouldn't go in .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?
zsh的环境变量的加载.zprofile .zlogin .zshrc .zshenv – Vincent Blog (xsudo.com)