You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows主机用Vcxsrv实现Linux Docker容器多bash多GUI显示

解决方案

第一步:关闭多余Vcxsrv实例

你当前启动了两个Vcxsrv实例,所有GUI程序可以共享同一个X服务器实例,多开反而会导致DISPLAY变量匹配错误:

  • 右键任务栏上显示DESKTOP-Q:1.0 - 0 clients的Vcxsrv图标,选择Exit关闭,仅保留DESKTOP-Q:0.0的运行实例即可。

第二步:统一配置DISPLAY环境变量

docker exec新开的bash会话默认不会继承容器首次启动时传入的环境变量,是报错的核心原因,两种配置方式二选一:

方式1:exec进入容器时主动传入环境变量

执行exec命令时增加-e DISPLAY参数,替换为和第一个正常会话完全相同的DISPLAY值:

docker exec -it -e DISPLAY=<你的Windows宿主机IP>:0.0 <容器名称/容器ID> bash

方式2:进入容器后手动配置

进入新的bash会话后,先执行变量配置命令再启动GUI程序:

export DISPLAY=<你的Windows宿主机IP>:0.0
# 可执行echo $DISPLAY和第一个正常会话的输出对比,确保值完全一致

第三步:验证配置

配置完成后可先安装轻量GUI工具测试连接是否正常:

# 安装测试工具
apt update && apt install -y x11-apps
# 运行测试命令,正常弹出窗口即为配置成功
xeyes

测试通过后再启动Rviz等ROS GUI程序即可正常运行。

长期配置优化

如果需要避免每次进入会话都手动配置,可以把DISPLAY变量写入容器内的bash配置文件:

echo 'export DISPLAY=<你的Windows宿主机IP>:0.0' >> /root/.bashrc

后续所有新的bash会话都会自动加载该变量。

注意事项

  • Vcxsrv启动时必须勾选「Disable access control」选项,否则会拒绝来自Docker容器的连接请求
  • 检查Windows Defender防火墙入站规则,确保Vcxsrv允许来自Docker虚拟网卡网段的入站连接

内容的提问来源于stack exchange,提问作者James Chong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:54:05