目标:在 Windows + WSL(Ubuntu 22.04) 环境下,使用 VcXsrv 作为 X 服务器,Native OpenGL 勾选,在 WSL 内启动 XFCE 桌面 与需要 OpenGL 的仿真窗口。
一、准备工作
-
Windows 10/11(建议 11)
-
WSL2 + Ubuntu 22.04(
wsl -l -v
可查看版本/发行版) -
以 普通用户 使用图形界面(避免 root 的 X 授权/会话问题)
二、创建普通用户 s
并设为默认用户
若你已用非 root 用户登录,可跳过本节。
# 在 WSL 的 root 终端中:
sudo adduser xx # 设置密码,其它回车
sudo usermod -aG sudo xx # 赋予 sudo 权限
设为默认用户(任选一种):
-
方法 A:在 PowerShell 执行(以你的发行版名为准,如 Ubuntu / Ubuntu-22.04):
wsl -l -v ubuntu.exe config --default-user xx # 或 ubuntu2204.exe / ubuntu2004.exe
-
方法 B:在 WSL 里写配置并重启 WSL:
echo -e "[user]\ndefault=xx" | sudo tee /etc/wsl.conf # 然后在 PowerShell: wsl --shutdown
三、在 WSL 安装 XFCE 与图形相关依赖
sudo add-apt-repository -y universe
sudo apt update
# XFCE 桌面 + 常用组件 + X/GL 工具
sudo apt install -y xfce4 xfce4-goodies dbus-x11 x11-xserver-utils \
x11-apps mesa-utils libgl1 libglx-mesa0 libglu1-mesa libglfw3 libglfw3-dev
备注:
x11-apps
(如 xeyes)、mesa-utils
(如 glxinfo/glxgears)用于验证 X11/GLX 是否正常。
四、Windows 端安装&配置 VcXsrv(勾选 Native OpenGL)
-
安装 VcXsrv(XLaunch)。
-
每次启动按向导选择:
-
Display settings:选择 One large window(或 Fullscre
-
Client startup:选择 Start no client。
-
Extra settings:勾选 Clipboard、勾选 Disable access control,勾选 Native OpenGL(本笔记以“勾选”为主设置)。
-
-
建议切配置前先在任务管理器中结束所有
vcxsrv.exe
,再重新启动。
命令行等价(可做成快捷方式):
"C:\\Program Files\\VcXsrv\\vcxsrv.exe" :0 -singlewindow -clipboard -wgl -ac
若后续出现 GLXFBConfig 相关报错,可改用兼容模式:去掉
-wgl
(即不勾选 Native OpenGL)。
五、WSL 环境变量持久化(强制连 VcXsrv,屏蔽 WSLg/Wayland)
将下面这段追加到 ~/.bashrc
最后(如已有 DISPLAY 配置,建议先注释/删除,避免冲突):
# === Force X11 to VcXsrv; avoid WSLg/Wayland ===
# 取 Windows 宿主 IP;取不到则 :0.0 兜底
WINDOWS_IP="$(awk '/nameserver/ {print $2; exit}' /etc/resolv.conf)"
if [ -n "$WINDOWS_IP" ]; then
export DISPLAY="${WINDOWS_IP}:0.0"
else
export DISPLAY=":0.0"
fi
# 禁用 Wayland/WSLg 干扰,强制走 X11
unset WAYLAND_DISPLAY
export XDG_SESSION_TYPE=x11
export GDK_BACKEND=x11
export QT_QPA_PLATFORM=xcb
# 规避 /mnt/wslg 权限问题(某些 GTK/DBus 组件需要)
export XDG_RUNTIME_DIR="/tmp/runtime-$USER"
[ -d "$XDG_RUNTIME_DIR" ] || mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR" 2>/dev/null || true
# === end ===
为保证
.bashrc
总被加载,若没有~/.bash_profile
,建议创建并转手加载:cat >> ~/.bash_profile <<'EOF' # Always load .bashrc [ -f ~/.bashrc ] && . ~/.bashrc EOF
执行 source ~/.bashrc
让其立即生效。
自检:
echo "$DISPLAY" # 预期:形如 172.x.x.x:0.0(而不是 :0)
xdpyinfo | grep -i vendor # 预期:The VcXsrv Project
六、启动桌面与基本验证
-
Windows 先启动 VcXsrv(One large window + Clipboard + Disable access control + 勾选 Native OpenGL)。
-
WSL(sj 用户):
xhost +local: # 第一次或重启后执行一次即可 startxfce4 # XFCE 桌面会出现在 VcXsrv 的单窗口中
-
验证 X/GL 基本可用:
xeyes # 应弹出“小眼睛”窗口 glxinfo -B # 应显示 GLX Renderer/Version 信息 glxgears # 应弹出转轮并跑帧率
七、运行需要 OpenGL 的仿真程序
以 Native OpenGL 勾选 为前提,需要
LIBGL_ALWAYS_INDIRECT=1
:
conda activate Triple
export LIBGL_ALWAYS_INDIRECT=1
python /mnt/你的路径/server.py --write "test" --env 1
若后续遇到
No GLXFBConfigs returned / Failed to find a suitable GLXFBConfig
:
尝试把 VcXsrv 切到兼容模式(不勾选 Native OpenGL),并在运行前
unset LIBGL_ALWAYS_INDIRECT
;仍不行,用软件渲染兜底(更兼容,但性能低):
export MESA_LOADER_DRIVER_OVERRIDE=llvmpipe export GALLIUM_DRIVER=llvmpipe
八、常见问题与排错速查
-
Another Window Manager (Weston WM) is already running…
-
说明你连到了 WSLg/Weston,不是 VcXsrv;检查
echo $DISPLAY
是否为 IP:0.0(不是:0
),用xdpyinfo | grep vendor
确认为 VcXsrv。
-
-
X11: Failed to open display
-
确认 VcXsrv 正在运行;
echo $DISPLAY
有值;执行过xhost +local:
。
-
-
No GLXFBConfigs returned / Failed to find a suitable GLXFBConfig
-
切换 VcXsrv 的 Native OpenGL 勾选状态(开↔关)并配套调整
LIBGL_ALWAYS_INDIRECT
(开=设置1,关=unset)。必要时使用 llvmpipe 兜底。
-
-
Root 运行 GUI 无法连接 X
-
尽量使用普通用户;必须 root 时,先在普通用户执行
xhost si:localuser:root
,并确保 root 的DISPLAY
与普通用户一致。
-
-
GTK/DBus 报 XDG_RUNTIME_DIR/wayland-0 相关错误
-
确保已在
.bashrc
中设置XDG_RUNTIME_DIR=/tmp/runtime-$USER
且已unset WAYLAND_DISPLAY
。
-
九、实用别名/脚本(可选)
根据 VcXsrv 勾选状态准备两个启动别名:
# 勾选了 Native OpenGL(默认推荐):
echo "alias runsim='conda activate Triple && export LIBGL_ALWAYS_INDIRECT=1 && python /mnt/你的路径/server.py --write "'"'test'"'" --env 1'" >> ~/.bashrc
# 没勾选 Native OpenGL(兼容模式):
echo "alias runsim_compat='conda activate Triple && unset LIBGL_ALWAYS_INDIRECT && python /mnt/你的路径/server.py --write "'"'test'"'" --env 1'" >> ~/.bashrc
source ~/.bashrc
之后在 XFCE 终端直接运行
runsim
或runsim_compat
。
Windows 端 VcXsrv 快捷命令:
# 勾选 Native OpenGL(-wgl)
"C:\\Program Files\\VcXsrv\\vcxsrv.exe" :0 -singlewindow -clipboard -wgl -ac
# 不勾选 Native OpenGL(去掉 -wgl)
"C:\\Program Files\\VcXsrv\\vcxsrv.exe" :0 -singlewindow -clipboard -ac
十、日常使用流程清单
-
Windows:启动 VcXsrv(One large window / Fullscreen、Start no client、Clipboard、Disable access control、勾选 Native OpenGL)。
-
WSL(sj):
xhost +local: startxfce4
-
若仿真弹窗异常(GLXFBConfig 问题),把 VcXsrv 切到不勾选 Native OpenGL并改用:
至此,WSL + XFCE + VcXsrv(Native OpenGL 勾选) 的环境就搭建完成了。