从这篇文章中,它指出Windows 11原生支持在wsl上运行X11和wayland应用程序。
我尝试通过 docker 容器执行相同的操作,设置环境变量
DISPLAY="host.docker.internal:0.0"
,并运行 gui 应用程序(如 gedit
)。但我却得到了这个错误:
Unable to init server: Could not connect: Connection refused
Gtk-WARNING **: 17:05:50.416: cannot open display: host.docker.internal:0.0
这个答案很大程度上基于 Chrillof 的说法。感谢您的出色开始!
对于使用 WSL2 的 Windows 上的 Docker Desktop 用户来说,关键的事情是:
/tmp/.X11-unix
。该文件夹实际上位于 docker-desktop 发行版上的 /mnt/host/wslg/.X11-unix
文件夹中,在运行容器时会转换为 /run/desktop/mnt/host/wslg/.X11-unix
。我发现了这个 GitHub 问题,其中有人必须手动设置环境变量,这使我能够将其他人直接在 WSL2 上体验到的点与 Chrillof 的解决方案联系起来
因此,从主机使用PowerShell修改chrillof的解决方案,它看起来更像是:
docker run -it -v /run/desktop/mnt/host/wslg/.X11-unix:/tmp/.X11-unix `
-v /run/desktop/mnt/host/wslg:/mnt/wslg `
-e DISPLAY=:0 `
-e WAYLAND_DISPLAY=wayland-0 `
-e XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir `
-e PULSE_SERVER=/mnt/wslg/PulseServer `
guitest:1.0
需要明确的是,我还没有检查音频是否正常工作,但是如果您已经安装了 WSL2,这确实可以让您避免安装另一个 X11 服务器。
我在尝试与您相同的事情时偶然发现了您的问题,并在这篇关于 Microsoft 的博客文章的帮助下实际上让它发挥了作用。我使用基于 Ubuntu 的最小 Dockerfile 并安装
gedit
:
FROM ubuntu:22.04
RUN apt update -y && apt install -y gedit
CMD ["gedit"]
以通常的方式创建图像,例如
docker build . -t guitest:1.0
在 WSL 命令行上,像这样启动它:
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix \
-v /mnt/wslg:/mnt/wslg \
-e DISPLAY \
-e WAYLAND_DISPLAY \
-e XDG_RUNTIME_DIR \
-e PULSE_SERVER \
guitest:1.0
我希望这对您也有好处。
不确定它是否对您有帮助,但我在 docker 中使用 Xlaunch 作为 UI。这是一个使用示例 docker 中的 gui 应用程序