最新的WSL2已经支持图形界面(wslg)了,这里教大家运行GUI应用(桌面环境同理,但是我建议大家不要安装桌面环境,没有桌面环境也可以单独运行GUI应用)
更新WSL
建议更新到最新版本,早期的WSL2不支持wslg,如果你是wsl1,请先升级wsl2
# 更新wsl版本
wsl --update
# 停止正在运行的实例,不停的话不会生效
wsl --shutdown
安装ArchWSL
安装好了的请直接跳过此步骤
下载
Releases · yuk7/ArchWSL · GitHub
安装请看如下官方说明
如何安装 | ArchWSL official documentation
运行GUI应用
原文如下
使用 WSL 运行 Linux GUI 应用 | Microsoft Learn
文中以ubuntu为例的,其实其他linux也是一样,直接安装GUI应用就可以了
本文以firefox为例,原文中是gimp、vlc
# 安装
sudo pacman -S firefox firefox-i18n-zh-cn
# 启动
firefox
如果此时出现以下错误
[2950] Wayland Proxy [0x7f1ae414d350] Error: CheckWaylandDisplay(): Failed to connect to Wayland display '/run/user/0//wayland-0' error: No such file or directory
Error: Failed to open Wayland display, fallback to X11. WAYLAND_DISPLAY='wayland-0' DISPLAY=':0'
[GFX1-]: glxtest: Could not connect to wayland display, WAYLAND_DISPLAY=(null)
如下图
不要慌,链接wslg的接口套接字到x11
sudo rm -r /tmp/.X11-unix
ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix
再执行firefox命令就会弹出窗口了。
建议再创建一个配置文件/etc/tmpfiles.d/wslg.conf
写入以下内容,这样重启就不会再出现上面的问题了
# This file is part of the debianisation of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# See tmpfiles.d(5) for details
# Type Path Mode UID GID Age Argument
L+ /tmp/.X11-unix - - - - /mnt/wslg/.X11-unix
这里的解决方案是通过后面的链接找到的,如果有其他问题,建议翻阅。
问题排除
Diagnosing "cannot open display" type issues with WSLg · microsoft/wslg Wiki · GitHub
中文乱码
这种方式打开GUI程序,如果需要展示中文,就会展示成小方块,需要按以下步骤配置中文字体
# 修改字体配置
sudo sed -i 's/#zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen
sudo locale-gen
# 安装中文字体
sudo pacman -S noto-fonts-cjk noto-fonts-emoji
# 重启wsl生效
wsl --shutdown
wsl
中文输入法
安装fcitx5, 详细配置可参考
# 安装
sudo pacman -S fcitx5-im fcitx5-chinese-addons fcitx5-material-color
# 启动
fcitx5 &
配置环境变量,写入~/.bashrc
export LANG=zh_CN.UTF-8
export LC_CTYPE="zh_CN.UTF-8"
# 一般只需要这三行就可以了
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
export XIM=fcitx
export XIM_PROGRAM=fcitx
配置fcitx5,运行命令
fcitx5-configtool
如果运行出现这个错误:无法通过DBus连接到Fcitx,Fcitx是否正在运行?
这是应该是wsl在开启systemctl的一个bug,没有自动创建dbus的用户进程。可以通过systemctl status --user验证,会报错:“Failed to connect to bus: No such a file or dirctory”,手动启动dbus可以解决这个问题,但是需要每次都允许dbus-damon,github issues有解决方法
sudo loginctl enable-linger $USER
原文:microsoft/WSL#10205 (comment)
其他问题可以运行fcitx5命令,看一下日志,或者执行下诊断命令fcitx5-diagnose
如果由于wayland的原因导致连接不上,可以禁用wayland
方法一:能打开fcitx5配置窗口(fcitx5-configtool)
方法二:不能打开fcitx5配置窗口(fcitx5-configtool)
# 在配置文件 /home/$USER/.config/fcitx5/config 后面追加 以下内容
[Behavior/DisabledAddons]
0=wayland
方法三:直接删除wayland附加组件
rm /usr/share/fcitx5/addon/wayland*