尝试 WSLg 以及启用图形加速

关于 WSLg

在老早之前微软就宣布了 WSL 支持图形界面,这个项目的代号就叫做 WSLg。因为不常用 Windows 于是我其实一直没有尝试这东西,直到昨天 Windows 11 推送 insider 版本。我为了尝试 Windows 11 找了个电脑升级之后,发现最想要的 Android 模拟器还没加进来,感叹微软虚假宣传之外,顺便尝试下 WSLg 的玩法。

其实最令人感到奇妙的就是 WSLg 都用上了 Wayland,然而有些发行版的 Wayland 支持还是不积极。

使用 WSLg

在很多地方已经有了详细的介绍,开启 WSLg 首先就要开启 WSL2,首先要去 启用或关闭 Windows 功能 里面开启 适用于 Linux 的 Windows 子系统 以及 虚拟机平台,注意后者有很多名字类似的,不要开错了。然后安装 WSL 的发行版。我还是老样子选了 修改版的 Fedora。因此后面的绝大多数内容都是针对 Fedora 的。

体验

可用的输入法(fcitx5)
GPU硬件加速可用
Gnome 控制中心

基本达到了作为一个桌面可用的阶段,但是坑依旧很多,并且坑是各方位的...

DBus

DBus 作为现在 Linux 桌面关键的组建(我觉得)本应在 WSLg 里面配置,可惜微软没有做,需要我们自己折腾:

Session Bus

Session Bus 用于用户自己的程序之间相互沟通,比如多数输入法或者 Gnome-Terminal 都需要 Session Bus 才能正确工作。首先安装需要的软件包

  • daemonize
  • dbus-daemon

然后在你的 ~/.bash_profile (或者随便哪个你觉得合适的地方) 加上

1
2
daemonize -e /tmp/dbus-${USER}.log -o /tmp/dbus-${USER}.log -p /tmp/dbus-${USER}.pid -l /tmp/dbus-${USER}.pid -a /usr/bin/dbus-daemon --address="unix:path=$XDG_RUNTIME_DIR/bus" --session --nofork  >>/dev/null 2>&1
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"

原理很简单,就是 /tmp/dbus-${USER}.pid 作为 lockfile 保证 dbus 是单实例的,监听地址就在 unix:path=$XDG_RUNTIME_DIR/bus,也就是 XDG 规定的默认地址。并设置环境变量。

System Bus

System Bus 用到的情况就要少一点了,但是为了整活运行 gnome-control-center 需要可用的 System Bus。并且因为权限的问题,最好借助 WSL 自己的 boot 功能实现。

首先准备一个脚本,我放到了 /usr/local/bin/boot.sh,内容是

1
2
3
4
#!/bin/bash

/usr/bin/mkdir -p /run/dbus/
/usr/bin/dbus-daemon --system

然后在 /etc/wsl.conf 中添加以下字段

1
2
[boot]
command=/usr/local/bin/boot.sh

这里又有个坑,就是前面脚本必须写完路径,因为这个脚本执行的时候还没有 PATH 环境变量。

输入法

对于输入法的配置就相对简单了(虽然还是有坑),首先在 WSL 里面安装 fcitx5 相关软件包,然后启动 fcitx5 进行测试... 发现 fcitx5 默默退出。仔细研究之后发现问题在 wayland 插件上面,于是应该加上 --disable=wayland 才好使。因此,最终在 ~/.bash_profile (或者随便哪个你觉得合适的地方) 加上:

1
2
3
4
5
daemonize -e /tmp/fcitx5.log -o /tmp/fcitx5.log -p /tmp/fcitx5.pid -l /tmp/fcitx5.pid -a /usr/bin/fcitx5 --disable=wayland
export INPUT_METHOD=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

GPU 加速

虽然背后的故事很复杂,但是为了实现图形加速,你需要

  • 开启了 d3d12 选项的 mesa > 21
  • 支持 WDDM 3.0 的驱动

Windows 侧需要的驱动可以在

下载,安装后。就是捣鼓 mesa 了。首先把 exclude=mesa* 添加到 /etc/yum.repos.d/{fedora.repo, fedora-updates.repo, fedora-updates-testing.repo} 的第一个块里面,禁用掉系统源的 mesa,然后

1
2
3
4
sudo dnf swap generic-release fedora-release
sudo dnf copr enable yanqiyu/mesa
sudo dnf reinstall mesa*
sudo dnf install mesa-d3d12

然后图形加速应该就可用了。可以用 glxinfo -B 检验下。


尝试 WSLg 以及启用图形加速
https://yanqiyu.info/2021/06/29/wslg-gpu/
作者
Karuboniru
发布于
2021年6月29日
许可协议