Lorsque j'utilisais un bureau X11, je pouvais exécuter des applications graphiques dans des conteneurs Docker en partageant la $DISPLAY
variable et le /tmp/X11-unix
répertoire. Par exemple:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Maintenant, je suis sur Fedora 25 exécutant Wayland, il n'y a donc pas d'infrastructure X11 à partager avec le conteneur. Comment puis-je lancer une application graphique dans le conteneur et la faire apparaître sur mon bureau? Existe-t-il un moyen de lier XWayland?
/run/user/1000/wayland-0
pour mon bureau personnel.Réponses:
Comme vous dites que vous utilisez Fedora 25 avec Wayland, je suppose que vous utilisez le bureau Gnome-Wayland.
Gnome-Wayland exécute Xwayland pour prendre en charge les applications X. Vous pouvez partager l' accès à Xwayland comme vous l'avez fait auparavant avec Xorg.
Votre exemple de commande manque
XAUTHORITY
, et vous ne le mentionnez pasxhost
. Vous avez besoin de l'une de ces façons pour autoriser les applications X dans Docker à accéder à Xwayland (ou à n'importe quel X). Comme tout cela n'est pas lié à Wayland, je me réfère à Comment pouvez-vous exécuter des applications GUI dans un conteneur Docker? sur la façon d'exécuter des applications X dans Docker.Pour faire court, deux solutions avec xhost:
xhost +SI:localuser:$(id -un)
et créez un utilisateur similaire avec l'option runer docker:--user=$(id -u):$(id -g)
xhost +SI:localuser:root
Piège connexe : X utilise normalement la mémoire partagée (extension X
MIT-SHM
). Les conteneurs Docker sont isolés et ne peuvent pas accéder à la mémoire partagée. Cela peut entraîner des problèmes de rendu et des échecs d'accès à la RAM. Vous pouvez éviter cela avec l'option runer docker--ipc=host
. Cela affecte l'isolement du conteneur car il désactive l'espace de noms IPC. Comparez: https://github.com/jessfraz/dockerfiles/issues/359Pour exécuter des applications Wayland dans Docker sans X, vous avez besoin d'un compositeur Wayland en cours d'exécution comme Gnome-Wayland ou Weston. Vous devez partager la prise Wayland. Vous le trouvez dans
XDG_RUNTIME_DIR
et son nom est stocké dansWAYLAND_DISPLAY
. CommeXDG_RUNTIME_DIR
ne permet l'accès que pour son propriétaire, vous avez besoin du même utilisateur dans le conteneur que sur l'hôte. Exemple:Les applications QT5 ont également besoin
-e QT_QPA_PLATFORM=wayland
et doivent être démarrées avecimagename dbus-launch waylandapplication
x11docker pour les applications X et Wayland dans docker est une solution tout en un. Il se soucie également de préserver l'isolement du conteneur (qui se perd si vous partagez simplement l'affichage de l'hôte X comme dans votre exemple).
la source
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland couvrira l'ensemble de l'affichage; vous pouvez le déplacer avec <Super> <LeftMouseButton>. Avec x11docker:x11docker --xwayland imagename application
.xpra
est porté un jour sur GTK3 + python3 , il offrira d'autres possibilités avec des fenêtres transparentes. Des configurations invisibles sont possibles avecXvfb
en conteneur. Pour une discussion détaillée, vous pouvez ouvrir un ticket d'émission sur github .Je recommanderais Sommelier by Google. Il vous permet de lancer les applications Wayland OR X11 et fournit les sockets que ces applications recherchent afin de les intégrer au serveur d'affichage actuel. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Un mode d'emploi simple qui devrait fonctionner sur n'importe quel système, pas seulement Crouton / Crostini sur ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
la source