web-dev-qa-db-fra.com

Comment puis-je exécuter une application graphique dans un conteneur sous Wayland?

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?

16
Willi Ballenthin

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:

  1. Autorisez l'accès de votre utilisateur local via xhost: xhost +SI:localuser:$(id -un) et créez un utilisateur similaire avec l'option runer docker: --user=$(id -u):$(id -g)
  2. Découragé: autorisez l'accès root à X avec 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).

17
mviereck

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)

0
dragon788