从 X11 到 Wayland:WSLg 为什么不是简单开了一个 X Server

如果你搜索“WSL 运行 Linux 图形程序”,很容易翻到一堆老教程:安装 VcXsrv,打开 XLaunch,防火墙放行,手动设置 DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

这些教程不是错,只是很多已经不适合现在的 WSLg 了。

X11、Wayland 与 WSLg 的窗口链路

今天在 Windows 11 上跑 Ubuntu,装个 xeyes 或 gedit,很多时候什么都不用配:

sudo apt install x11-apps gedit -y
xeyes
gedit

窗口会直接出现在 Windows 桌面上,能 Alt+Tab,能复制粘贴,像普通 Windows 程序一样和其他窗口排在一起。

这件事表面上像“微软帮你内置了一个 X Server”。但 WSLg 真正做的事要绕一点:它不是倒退回 X11,而是把 Wayland、XWayland、Weston、PulseAudio 和 RDP 拼成了一条桥。理解这条桥,很多 WSL GUI 问题就不再玄学。

从 xeyes 开始看协议,而不是看窗口

先跑一个最老派的 X11 小程序:

sudo apt install x11-apps -y
xeyes

再跑一个现代一点的 GTK 程序:

sudo apt install gedit -y
gedit

两个窗口都能显示在 Windows 桌面上,但它们走的路线可能不同。

xeyes 是典型 X11 程序。它和 X server 说话。
gedit 这样的 GTK 程序,在现代 Linux 桌面上可以走 Wayland,也可以回退到 X11。
在 WSLg 里,Wayland 程序通常直接和 Weston 这个 compositor 交互;X11 程序则先经过 XWayland,再交给 Weston。

你可以看一下环境变量:

echo "$WAYLAND_DISPLAY"
echo "$DISPLAY"
ls -la /mnt/wslg

在 WSLg 正常工作时,WAYLAND_DISPLAY 和 DISPLAY 往往都存在。很多人看到 DISPLAY 就以为“还是 X11”。其实这个变量更多是在照顾旧程序。新的主路是 Wayland,X11 通过 XWayland 兼容。

Wayland 与 X11/XWayland 两条路径最终汇入 Weston

这个图可以帮你纠正一个直觉误差:WSLg 不是只维护一条“X11 到 Windows”的路。现代应用和旧应用可能从不同入口进来,但最后都要经过 Weston 这个合成器,再被投递到 Windows 侧。

X11 的强项:把显示当成网络服务

X11 很老,但它的设计有一种今天看仍然大胆的味道。

在 X11 里,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值