$ xhost
access control enabled, only authorized clients can connect
xterm
作品:
$ docker run --rm -it --network host \
--volume ~/.Xauthority:/root/.Xauthority:ro \
--env DISPLAY \
alpine:3.19 sh -euxc 'apk add xterm; exec xterm'
chromium
打开一个窗口,似乎接收到按键,但窗口是空的(输出):
$ docker run --rm -it --network host \
--volume ~/.Xauthority:/root/.Xauthority:ro \
--env DISPLAY \
alpine:3.19 sh -euxc 'apk add chromium; exec chromium --no-sandbox'
如果我允许本地连接,xhost
它就可以工作:
$ xhost +local:
$ xhost
access control enabled, only authorized clients can connect
LOCAL:
$ docker run --rm -it --network host \
--volume ~/.Xauthority:/root/.Xauthority:ro \
--env DISPLAY \
alpine:3.19 sh -euxc 'apk add chromium; exec chromium --no-sandbox'
$ xhost -local:
人们可以在这里推测它启动了无权访问的非根进程/root/.Xauthority
,这就是它失败的原因。那么在哪个用户下呢?这样我就可以提供.Xauthority
给所有感兴趣的各方。我该如何调试这个?我该如何让它发挥作用?
chromium
不完全是一个答案,但在非 root 下运行可能更有意义:或者更好(我假设你在 PID 1000 下运行):
Dockerfile
:或者使用
chromium
seccomp 配置文件(创建于 2016 年),这让我们可以避免--no-sandbox
:seccomp 配置文件取自这些 答案,以下是其创建方式的描述。