WSL 下安装与使用 XFCE(配合 VcXsrv,Native OpenGL 勾选)—完整笔记

目标:在 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)

  1. 安装 VcXsrv(XLaunch)。

  2. 每次启动按向导选择:

    • Display settings:选择 One large window(或 Fullscre

    • Client startup:选择 Start no client

    • Extra settings:勾选 Clipboard、勾选 Disable access control勾选 Native OpenGL(本笔记以“勾选”为主设置)。

  3. 建议切配置前先在任务管理器中结束所有 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

六、启动桌面与基本验证

  1. Windows 先启动 VcXsrv(One large window + Clipboard + Disable access control + 勾选 Native OpenGL)。

  2. WSL(sj 用户)

    xhost +local:           # 第一次或重启后执行一次即可
    startxfce4              # XFCE 桌面会出现在 VcXsrv 的单窗口中
    
  3. 验证 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 终端直接运行 runsimrunsim_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

十、日常使用流程清单

  1. Windows:启动 VcXsrv(One large window / Fullscreen、Start no client、Clipboard、Disable access control、勾选 Native OpenGL)。

  2. WSL(sj)

    xhost +local:
    startxfce4
    
  3. 若仿真弹窗异常(GLXFBConfig 问题),把 VcXsrv 切到不勾选 Native OpenGL并改用:


至此,WSL + XFCE + VcXsrv(Native OpenGL 勾选) 的环境就搭建完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值