window wsl环境: autoware有日志,没有rviz界面/ autoware起不来

报错:

  1. 运行autoware报错: [ERROR] [rviz2-40]: process has died [pid 27797, exit code -6, cmd '/opt/ros/humble/lib/rviz2/rviz2 -d /root/work_space/autoware/install/autoware_launch/share/autoware_launch/rviz/autoware.rviz -s

2.运行rviz2报错:

root@1abfb637b0c5:~/work_space/autoware# rviz2

qt.qpa.xcb: could not connect to display :0

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.

This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Aborted (core dumped)

1. 你遇到了什么问题?(Symptoms)

核心问题是:Docker 容器内的图形化程序(Rviz2、xeyes)无法把画面投射到你的 Windows 屏幕上。

在这个过程中,你经历了三个阶段的报错:

  1. 找不到显示器qt.qpa.xcb: could not connect to display :0(Rviz2 瞎了,找不到屏幕)。

  2. 挂载错误HTTP code 400 ... not a directory(Docker 启动时,把主机的一个文件夹错误地当成文件挂载了)。

  3. 工具缺失xeyes: command not found(容器里没装测试工具)。


2. 为什么会这样?(Root Cause)

根本原因在于 "一山不容二虎" 导致的 X Server(显示管家)冲突

  • 冲突点:你的电脑里有两套图形显示方案。

    • 方案 A (WSLg):微软官方自带的。

    • 方案 B (MobaXterm):你自己安装的终端软件自带的。

  • 打架过程

    • 我最开始让你开启 WSLg (guiApplications=true),但这需要你的 Windows 系统组件支持。

    • 你的 MobaXterm 也在后台运行,它抢占了显示端口。

    • Docker 夹在中间,不知道该把画面发给谁(发给 :0 没人理,发给 localhost 也不通)。

  • 最终解决 :我们放弃了官方 WSLg,强制回退到 MobaXterm 方案 ,并明确告诉 Docker:"你的屏幕在 Windows 主机上(host.docker.internal)"。


3. 你做了哪些改动?(Change Log)

为了解决问题,我们对系统配置做了以下关键修改:

  1. 修改 Windows WSL 配置 (.wslconfig):

    • 改动 :将 guiApplications=true 改回了 false

    • 目的:关闭微软官方的图形功能,避免干扰 MobaXterm。

  2. 调整 MobaXterm 设置

    • 改动 :Settings -> X11 -> X11 remote access 改为 Full

    • 目的:允许"陌生人"(Docker 容器)连接 MobaXterm 的屏幕,防止被防火墙拦截。

  3. 容器内安装软件

    • 操作apt install x11-apps

    • 目的 :安装 xeyes 用于测试。


4. 你执行了哪些关键命令?(Command History)

这是解决问题的"通关密码":

  • 检查显示变量 (在 WSL 中): echo $DISPLAY -> 确认了是 localhost:10.0 (代表 MobaXterm 接管了)。

  • 进入容器docker exec -it 1abfb637b0c5 /bin/bash

  • 【最关键】在容器内指路export DISPLAY=host.docker.internal:0.0 (这句话的意思是:嘿 Docker,屏幕不在你这儿,在你的房东(host)那里)

  • 测试验证xeyes -> 成功弹窗。


5. 以后要如何解决?(SOP - 标准操作流程)

以后只要你重新开启电脑,或者重启了 Docker,只需按这个固定流程操作,保证 100% 能行

第一步:准备工作
  1. 打开 MobaXterm

  2. 确保右上角的 X Server 图标是绿色的(亮起的)。

第二步:启动docker,进入 Docker

启动docker: 重启docker,打开ubuntu,删除文件夹,建立文件夹,启动docker

进入docker:

使用 MobaXterm 连接你的 WSL,然后输入:

复制代码
# 查 ID
docker ps 
# 进容器
docker exec -it <你的容器ID> /bin/bash
第三步:连接屏幕(必做!)

每次进入容器后,第一件事就是输这行命令:

复制代码
export DISPLAY=host.docker.internal:0.0



#"喂,Docker 里的所有程序听好了(export),如果有画面要显示,请不要自己在内部消化,全部发送给(DISPLAY=)宿主机(host.docker.internal)上的第 0 号屏幕(:0.0)!"
第四步:启动rviz2测试
复制代码
rviz2

✅ 总结口诀: "开 Moba,进 Docker,输 export,跑 Rviz。"

相关推荐
独小乐21 小时前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
汀、人工智能21 小时前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
披着羊皮不是狼21 小时前
将Ubuntu从C盘移动到D盘
linux·运维·ubuntu
AINative软件工程21 小时前
跑 OpenClaw 一周烧了 300 块,我是怎么砍到 180 的
人工智能
CoderCodingNo21 小时前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
无聊大侠hello world21 小时前
Yu-AI-Agent 项目(AI 恋爱大师智能体) · 学习笔记
人工智能·笔记·学习
Proxy_ZZ021 小时前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法
XINVRY-FPGA1 天前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
l2ohvef1 天前
Windows 7 虚拟机 VMware Tools 安装失败:无法自动安装VSock 驱动程序
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志1 天前
从零开始写Linux字符设备驱动:一个不操作硬件的Hello驱动
linux·运维·数据库