如何在 docker 内使用主机 DISPLAY

How to use host DISPLAY within docker

如何在 docker 内使用主机 DISPLAY

我在我的 docker 实例中设置 DISPLAY 并想将它用于我的 xapps。但这就是我得到的:

me@178887a67067:/$ env | grep DISPLAY
DISPLAY=192.168.0.102:2

me@178887a67067:/$ xterm &
[1] 11
me@178887a67067:/$ xterm: Xt error: Can't open display: 192.168.0.102:2

[1]+  Exit 1                  xterm

如何允许 docker 中的 xapps 连接和使用我的主机 DISPLAY 而无需 使用主机网络 (--network host)?谢谢。

$ lsb_release -a 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic

[修改]

我知道这听起来像是常见问题解答,但我已经尝试了以下站点的所有方法,但 none 对我有用:

使用最简单的解决方案 https://iamhow.com/How_To/Docker_How_To.html#1484268 例如:

$ xhost +local:
non-network local connections being added to access control list

$ docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro image
# env | grep DISPLAY
DISPLAY=192.168.0.102:2

# xterm & 
Warning: This program is an suid-root program or is being run by the root user.
...
xterm: Xt error: Can't open display: %s

[1]+  Exit 1                  xterm

虽然这个问题很老,很多人可能有类似的问题issue/question。

我搜索了 google 并尝试了来自不同网站的所有方法。但是 none 起作用了。然后我在 docker 中使用主机 pid 并且它起作用了。

尝试在 docker.

中使用主机 pid
$ xhost +local:
$ docker run --pid=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro image