Cuando utilicé un escritorio X11, pude ejecutar aplicaciones gráficas en contenedores acoplables compartiendo la $DISPLAY
variable y el /tmp/X11-unix
directorio. Por ejemplo:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Ahora, estoy en Fedora 25 con Wayland, así que no hay infraestructura X11 para compartir con el contenedor. ¿Cómo puedo iniciar una aplicación gráfica en el contenedor y hacer que aparezca en mi escritorio? ¿Hay alguna forma de empatar en XWayland?
/run/user/1000/wayland-0
mi escritorio personal.Respuestas:
Como usted dice que está ejecutando Fedora 25 con Wayland, supongo que está utilizando el escritorio Gnome-Wayland.
Gnome-Wayland ejecuta Xwayland para admitir aplicaciones X. Puede compartir el acceso a Xwayland como lo hizo antes con Xorg.
Su comando de ejemplo falla
XAUTHORITY
y no lo mencionaxhost
. Necesita una de estas formas para permitir que las aplicaciones X en Docker accedan a Xwayland (o cualquier X). Como todo esto no está relacionado con Wayland, me refiero a ¿Cómo puede ejecutar aplicaciones GUI en el contenedor docker? sobre cómo ejecutar aplicaciones X en Docker.En resumen, dos soluciones con xhost:
xhost +SI:localuser:$(id -un)
y cree un usuario similar con la opción de ejecución de Docker:--user=$(id -u):$(id -g)
xhost +SI:localuser:root
Problemas relacionados : X normalmente usa memoria compartida (extensión X
MIT-SHM
). Los contenedores Docker están aislados y no pueden acceder a la memoria compartida. Eso puede conducir a fallas de renderizado y fallas de acceso a RAM. Puede evitar eso con la opción de ejecución de Docker--ipc=host
. Eso afecta el aislamiento del contenedor ya que deshabilita el espacio de nombres IPC. Comparar: https://github.com/jessfraz/dockerfiles/issues/359Para ejecutar aplicaciones Wayland en Docker sin X, necesita un compositor de wayland en ejecución como Gnome-Wayland o Weston. Tienes que compartir el zócalo Wayland. Lo encuentras en
XDG_RUNTIME_DIR
y su nombre se almacena enWAYLAND_DISPLAY
. ComoXDG_RUNTIME_DIR
solo permite el acceso a su propietario, necesita el mismo usuario en el contenedor que en el host. Ejemplo:Las aplicaciones QT5 también necesitan
-e QT_QPA_PLATFORM=wayland
y deben iniciarse conimagename dbus-launch waylandapplication
x11docker para aplicaciones X y Wayland en docker es una solución todo en uno. También se preocupa por preservar el aislamiento del contenedor (que se pierde si simplemente comparte la pantalla X del host como en su ejemplo).
fuente
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland cubrirá toda la pantalla; puedes moverlo con <Super> <LeftMouseButton>. Con x11docker:x11docker --xwayland imagename application
.xpra
transfiere a GTK3 + python3 , proporcionará más posibilidades con ventanas integradas . Las configuraciones invisibles son posibles con elXvfb
contenedor. Para una discusión detallada, puede abrir un ticket de problema en github .Recomiendo Sommelier de Google. Le permite iniciar aplicaciones Wayland OR X11 y proporciona los sockets que esas aplicaciones están buscando para ingresarlas en el servidor de visualización actual. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Un procedimiento simple que debería funcionar en cualquier sistema, no solo Crouton / Crostini en ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
fuente