众所周知,您可以通过将 X11 应用程序/tmp/.X11-unix
作为卷传递并进行DISPLAY
适当设置(例如通过使用转发-e DISPLAY=$DISPLAY
并可能~/.Xauthority
作为卷传递)在 docker 容器中运行 X11 应用程序。此方法要求 docker 守护程序在本地计算机上运行,因为只有在这种情况下,将 unix 套接字转发到容器中以访问 X11 才可能起作用。
但是,如果您在 Windows 上使用 Podman Desktop,则 Windows 上没有 DISPLAY 变量。如果您进入 WSL unix 容器,则可以从该容器访问 X11(使用 WSLg),并且可以按照https://podman-desktop.io/docs/podman/accessing-podman-from-another-wsl-instance中给出的说明将 podman 守护程序作为远程服务器访问。但是您无法转发/tmp/.X11-unix
,因为 docker 守护程序在与 WSL 发行版不同的机器(podman 系统机器)中运行。
有没有一种简单的方法可以在 Windows 上使用 podman 在 Unix 容器中运行 X11 应用程序?
您可以在 Windows 上使用 Podman Desktop 在 podman 容器中运行 X11 应用程序。执行 Linux 容器的 podman 系统计算机只是另一台可以访问 WSLg 的 WSL 计算机。因此,您只需将 X11 套接字从 podman 系统计算机转发到容器中即可。虽然转发
/tmp/.X11-unix
不起作用,但在 WSL 上,/mnt/wslg/.X11-unix
无论如何都要转发到此目录。此外,由于 WSLg 无论如何只提供一个 X 服务器,因此DISPLAY
变量始终为:0
,因此以下调用podman
成功执行 X 应用程序:当我发现无法使用笔记本电脑上的触控板很好地玩这个游戏后,我关闭了 XBill,然后出现了错误消息,如果通过关闭 X11 应用程序的主窗口而将其关闭,这是 X11 应用程序的标准行为,并不表示 X11 环境存在任何问题。