如何在 Windows 主机中使用 Vcxsrv 从 Linux Docker 容器的多个 bashes 显示多个 GUI?

How to have multiple GUI displays from multiple bashes of a Linux Docker Container using Vcxsrv in Windows host?

我目前有一个 Ubuntu docker 容器用于 运行 GUI 应用程序,称为 Gazebo 和 ROS。我正在使用 Vcxsrv 运行 我的 windows host os 上的 GUI,并且能够显示 GUI。然而,问题是我一次只能从我的 运行ning docker 容器中的一个 bash 显示一个 GUI,因为我能够 运行 我的第一个 GUI 程序,Gazebo ,在第一个 docker 容器 bash 中。但是在我 运行 一个新的 bash 和“docker exec -it bash” 然后 运行 另一个 GUI 程序,比如一个叫做 Rviz 的程序之后,我得到了此处错误:

root@:/# rviz
qt.qpa.xcb: could not connect to display [ip here].1:0.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

因此,我再次尝试 运行 我的“config.xlaunch”文件,然后是 rviz 命令,但出现了同样的错误。之后,我查看了任务栏右侧的小 vcxsrv 图标,其中一个显示“DESKTOP-Q:0.0 - 7 clients”,这对应于我的第一个 GUI 应用程序 运行ning。但是,第二个图标显示“DESKTOP-Q:1.0 - 0 个客户端”,这应该 运行 我的第二个 GUI 应用程序。因此,我想知道在同一个 运行ning 容器的多个 docker bash 中,多个 GUI 应用程序到 运行 需要做什么?谢谢。

原来我不得不将 Docker 容器中的 DISPLAY 环境变量从虚拟以太网更改为无线适配器,反之亦然。我在启动其中一个 GUI 程序后执行了此操作。在您能够启动第二个 GUI 程序后,您不必再切换环境变量。这个解决方案似乎不是最好的,因此请随时 post 更好的解决方案。