WSL2 运行 GUI 程序

在 Windows X Server 上显示 Linux GUI 程序

Posted by Jerry Chen on June 19, 2020

准备工作

  • Windows 2004 上启用 WSL2

  • X Server(X11 Server)

    X11 Server 有 VcXsrv、XMing、X410 等,这里选择 VcXsrv;

工具操作

这里演示 VcXsrv 的安装运行,和 MobaXterm 内置 X11 的配置运行;

安装使用 VcXsrv

先关闭其他的 X 服务器;

下载地址:点这里下载

VcXsrv 安装

选择全部组件:

选择安装位置:

VcXsrv 配置

每次打开软件,首先会进入显示设置;

选择多窗口:

选择默认的 “Start no client”

额外设置项:

运行某些软件如 rviz2 需要把 Native opengl 去掉勾选;

配置完成后,托盘区出现 X 图标即运行成功;未出现,可能是其他 X 服务器占用了端口;

使用 MobaXterm 内置的 X11

同理,先关闭其他的 X 服务器;

X11 配置
  • 随软件启动,如果用其他 X11 服务器这项就不选择;
  • x11 远程访问选择“full”,建议选择,否则会有弹窗提示;

X11 运行
  • 菜单 “X 服务器” –> “XDMCP 会话”

    生成的 Broadcast 会话可以删除,不影响;

  • 菜单 “X 服务器” –> “启动 X 服务器”

    再次点击是关闭 X 服务器;

WSL2 操作

配置 IP

主机上 ipconfig 查看主机和 WSL2 连接的 IP:

WSL2 上设置显示环境变量(配置远程显示):

以下是临时生效,加入到 ~/.bashrc 才能保持生效;

1
2
3
4
5
6
7
8
9
# 方式一:填写查询到的 ip
export DISPLAY=172.23.144.1:0

# 方式二:填写 /etc/resolv.conf 中记录的信息
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

# 加上后不会报 libGL error
# 部分程序如 rviz2 需要将下面环境变量设为 0
export LIBGL_ALWAYS_INDIRECT=1
测试

如果不成功,请先关闭 Windows 防火墙再尝试;

安装轻量 gui 编辑器 mousepad,接着运行:

1
2
3
4
# 安装
sudo apt install mousepad -y
# 运行
mousepad hello.txt

效果:

不想阻塞可以加 & 后台执行;

安装 x11-apps(不建议):

1
sudo apt install x11-apps

运行小程序:

不想阻塞可以加 & 后台执行;

1
2
3
4
5
# 控制台 1 运行
xclock

# 控制台 2 运行
xcalc

效果:

如果报错,请检查防火墙,试着允许 x11 服务器的端口;

其他

此外,WSL2 和 Windos 是共享环境变量的,可以在控制台调用和打开对方的软件;

在 WSL2 上打开 explorer.exe 和 notepad.exe:

在 PowerShell 中调用 bash: