Quando usei uma área de trabalho do X11, eu poderia executar aplicativos gráficos em contêineres do docker compartilhando a $DISPLAY
variável e o /tmp/X11-unix
diretório. Por exemplo:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Agora, estou no Fedora 25 executando o Wayland, então não há infraestrutura X11 para compartilhar com o contêiner. Como iniciar um aplicativo gráfico no contêiner e exibi-lo na minha área de trabalho? Existe alguma maneira de amarrar no XWayland?
/run/user/1000/wayland-0
minha área de trabalho pessoal.Respostas:
Como você diz que está executando o Fedora 25 com Wayland, presumo que você esteja usando a área de trabalho do Gnome-Wayland.
O Gnome-Wayland executa o Xwayland para suportar aplicativos X. Você pode compartilhar o acesso ao Xwayland como fez antes com o Xorg.
Seu comando de exemplo falha
XAUTHORITY
e você não mencionaxhost
. Você precisa de uma destas maneiras para permitir que aplicativos X na janela de encaixe acessem o Xwayland (ou qualquer outro X). Como tudo isso não está relacionado ao Wayland, refiro-me a Como você pode executar aplicativos GUI no contêiner de docker? sobre como executar aplicativos X na janela de encaixe.Para resumir, duas soluções com xhost:
xhost +SI:localuser:$(id -un)
e crie um usuário semelhante com a opção de execução do docker:--user=$(id -u):$(id -g)
xhost +SI:localuser:root
Armadilha relacionada : O X normalmente usa memória compartilhada (extensão X
MIT-SHM
). Os contêineres do Docker são isolados e não podem acessar a memória compartilhada. Isso pode levar a falhas de renderização e falhas no acesso à RAM. Você pode evitar isso com a opção de execução do docker--ipc=host
. Isso afeta o isolamento do contêiner, pois desativa o namespace do IPC. Compare: https://github.com/jessfraz/dockerfiles/issues/359Para executar aplicativos Wayland na janela de encaixe sem o X, você precisa de um compositor de wayland em execução, como Gnome-Wayland ou Weston. Você precisa compartilhar o soquete Wayland. Você o encontra
XDG_RUNTIME_DIR
e seu nome é armazenadoWAYLAND_DISPLAY
. ComoXDG_RUNTIME_DIR
apenas permite acesso ao proprietário, você precisa do mesmo usuário no contêiner e no host. Exemplo:Os aplicativos QT5 também precisam
-e QT_QPA_PLATFORM=wayland
e devem ser iniciados comimagename dbus-launch waylandapplication
O x11docker para aplicativos X e Wayland no docker é uma solução completa. Ele também se preocupa em preservar o isolamento do contêiner (que se perde se simplesmente compartilhar a exibição do host X, como no seu exemplo).
fonte
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland cobrirá toda a exibição; você pode movê-lo com <Super> <LeftMouseButton>. Com x11docker:x11docker --xwayland imagename application
.xpra
for portado para o GTK3 + python3 algum dia, fornecerá outras possibilidades com janelas perfeitas. Configurações invisíveis são possíveisXvfb
no contêiner. Para uma discussão detalhada, você pode abrir um ticket de edição no github .Eu recomendo o Sommelier do Google. Ele permite que você inicie aplicativos Wayland OR X11 e fornece os soquetes que esses aplicativos estão procurando para levá-los ao servidor de exibição atual. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Um simples passo a passo deve funcionar em qualquer sistema, não apenas no Crouton / Crostini no ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
fonte