Lorsque j'utilisais un bureau X11, je pouvais exécuter des applications graphiques dans des conteneurs Docker en partageant le $DISPLAY
variable et /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? Y a-t-il un moyen de lier XWayland?
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 mentionnez pas xhost
. 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
Connexes Piège : 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 RAM échecs d'accès. Vous pouvez éviter cela avec l'option d'exécution du docker --ipc=Host
. Cela affecte l'isolement du conteneur car il désactive IPC namespacing. Compare: https://github.com/jessfraz/dockerfiles/issues/359
Pour exécuter les applications Wayland dans Docker sans X, vous avez besoin d'un compositeur Wayland comme Gnome-Wayland ou Weston. Vous devez partager la prise Wayland. Vous le trouvez dans XDG_RUNTIME_DIR
et son nom est stocké dans WAYLAND_DISPLAY
. Comme XDG_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:
docker run -e XDG_RUNTIME_DIR=/tmp \
-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--user=$(id -u):$(id -g) \
imagename waylandapplication
Les applications QT5 nécessitent également -e QT_QPA_PLATFORM=wayland
et doit être démarré avec imagename 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).
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- (Une alternative plus native à xiwi)