$ xhost
access control enabled, only authorized clients can connect
xterm
funciona:
$ docker run --rm -it --network host \
--volume ~/.Xauthority:/root/.Xauthority:ro \
--env DISPLAY \
alpine:3.19 sh -euxc 'apk add xterm; exec xterm'
chromium
abre uma janela e parece receber pressionamentos de tecla, mas a janela está vazia ( output ):
$ 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'
Se eu permitir conexões locais, xhost
ele funcionará:
$ 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:
Pode-se especular aqui que ele inicia processos não-root que não têm acesso /root/.Xauthority
e é por isso que falha. Então, sob qual usuário? Para que eu pudesse fornecer .Xauthority
a todos os interessados. Como faço para depurar isso? Como faço para que isso funcione?
Não é exatamente uma resposta, mas provavelmente faz mais sentido rodar
chromium
sem root:Ou melhor ainda (presumo que você esteja executando o PID 1000):
Dockerfile
:Ou usando um
chromium
perfil seccomp (criado em 2016), que nos permite evitar--no-sandbox
:O perfil seccomp foi retirado dessas respostas e aqui está a descrição de como ele foi criado.