Wenn ich einen X11-Desktop verwendete, konnte ich grafische Anwendungen in Docker-Containern ausführen, indem ich die $DISPLAY
Variable und das /tmp/X11-unix
Verzeichnis gemeinsam nutzte . Beispielsweise:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Jetzt bin ich auf Fedora 25 und leite Wayland. Es gibt also keine X11-Infrastruktur, die ich mit dem Container teilen könnte. Wie kann ich eine grafische Anwendung im Container starten und auf meinem Desktop anzeigen lassen? Gibt es eine Möglichkeit, in XWayland zu binden?
/run/user/1000/wayland-0
meinem persönlichen Desktop.Antworten:
Ich gehe davon aus, dass Sie den Gnome-Wayland-Desktop verwenden, da Sie Fedora 25 mit Wayland verwenden.
Gnome-Wayland führt Xwayland aus, um X-Anwendungen zu unterstützen. Sie können den Xwayland- Zugang wie zuvor mit Xorg teilen .
Ihr Beispielbefehl fehlt
XAUTHORITY
und Sie erwähnen nichtxhost
. Sie benötigen eine dieser Möglichkeiten, um X-Anwendungen in Docker den Zugriff auf Xwayland (oder ein beliebiges X) zu ermöglichen. Da dies alles nicht mit Wayland zu tun hat, verweise ich auf Wie können Sie GUI-Anwendungen im Docker-Container ausführen? zum Ausführen von X-Anwendungen im Docker.Kurz gesagt, zwei Lösungen mit xhost:
xhost +SI:localuser:$(id -un)
und erstellen Sie einen ähnlichen Benutzer mit der Docker-Ausführungsoption:--user=$(id -u):$(id -g)
xhost +SI:localuser:root
Verwandte Fallstricke : X verwendet normalerweise den gemeinsamen Speicher (X-Erweiterung
MIT-SHM
). Docker-Container sind isoliert und können nicht auf den gemeinsam genutzten Speicher zugreifen. Dies kann zu Störungen beim Rendern und RAM-Zugriffsfehlern führen. Mit der Docker-Ausführungsoption können Sie dies vermeiden--ipc=host
. Dies wirkt sich auf die Containerisolierung aus, da der IPC-Namespace deaktiviert wird. Vergleiche: https://github.com/jessfraz/dockerfiles/issues/359Um Wayland- Anwendungen in Docker ohne X auszuführen, benötigen Sie einen Wayland-Compositor wie Gnome-Wayland oder Weston. Sie müssen den Wayland-Sockel teilen. Sie finden es in
XDG_RUNTIME_DIR
und sein Name wird in gespeichertWAYLAND_DISPLAY
. DaXDG_RUNTIME_DIR
der Zugriff nur seinem Besitzer gestattet ist, benötigen Sie denselben Benutzer im Container wie auf dem Host. Beispiel:QT5-Anwendungen
-e QT_QPA_PLATFORM=wayland
müssen ebenfalls gestartet werdenimagename dbus-launch waylandapplication
x11docker für X- und Wayland-Anwendungen in Docker ist eine Komplettlösung . Es ist auch wichtig, die Containerisolation beizubehalten (dies geht verloren, wenn Sie einfach die Host-X-Anzeige wie in Ihrem Beispiel freigeben).
quelle
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland deckt das gesamte Display ab. Sie können es mit <Super> <LeftMouseButton> verschieben. Mit x11docker:x11docker --xwayland imagename application
.xpra
es eines Tages auf GTK3 + python3 portiert wird, bietet es weitere Möglichkeiten mit nahtlosen Fenstern. Unsichtbare Einstellungen sind mitXvfb
in container möglich. Zur ausführlichen Diskussion können Sie bei github ein Issue Ticket eröffnen .Ich würde Sommelier von Google empfehlen. Sie können damit Wayland OR X11-Apps starten und die Sockets bereitstellen, nach denen diese Apps suchen, um sie auf den aktuellen Anzeigeserver zu übertragen. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Eine einfache Anleitung sollte auf jedem System funktionieren, nicht nur auf Crouton / Crostini unter ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
quelle