wsl2-wslg-配置环境变量

上一级页面:index-wslg

前言

接下来给出WSL端详细配置过程

因为wslg是在nologin状态下使用的,配置x11 client(x client)时,应当写在全局的shell env文件中(所有用户适用非shell环境适用),对应zsh是/etc/zsh/zshenv

配置ZDOTDIR

1
2
3
4
# /etc/zsh/zshenv

# 我在这个文件夹($HOME/.zsh/wsl2)中储存 .zshenv .zshrc .zprofile等
ZDOTDIR=$HOME/.zsh/wsl2

配置代理地址:$HOST_SERVER

由于WSL 2使用虚拟机,其IP和Windows不同,所以需要进行一些特殊设置。

$HOST_SERVER是手动设置的一个环境变量,用于获取主机地址

更改配置文件

1
vim $ZDOTDIR/.zshenv
  • 如果你使用bash,修改/etc/environment(bash的环境变量配置文件),添加全局的环境变量

$HOST_SERVER 具体设置如下

1
2
3
4
5
6
7
8
9
10
11
12
# 如果安装了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的第二段

1
vim $ZDOTDIR/.Xresources
1
2
3
4
5
6
7
8
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环境适用的配置文件中进行配置。

更改配置文件

1
vim $ZDOTDIR/.zshenv
  • 如果你使用bash,修改/etc/environment(bash的环境变量配置文件),添加全局的环境变量

指定DBUS_SESSION_BUS_ADDRESS,用于wsl和windows进行正常的通信

  • $HOST_SERVER是前文设置的代理地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ===========设置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和缩放,修复高分辨率屏的字体模糊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# =================================
# 设置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

设置个性化设置

1
2
3
4
5
6
7
8
9
10
11
# ====================
# 设置个性化设置
# ====================

# 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 # 默认输入法

设置输入法的自启动

1
2
3
# 设置fcitx自启动
fcitx-autostart &>/dev/null

不使用间接渲染–unset LIBGL_ALWAYS_INDIRECT

更改配置文件

1
vim $ZDOTDIR/.zshenv
  • 如果你使用bash,修改/etc/environment(bash的环境变量配置文件),添加全局的环境变量
1
2
3
# 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)