Come posso eseguire un'applicazione grafica in un container sotto Wayland?


15

Quando ho usato un desktop X11, ho potuto eseguire applicazioni grafiche in contenitori docker condividendo la $DISPLAYvariabile e la /tmp/X11-unixdirectory. Per esempio:

docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock

Ora sono su Fedora 25 con Wayland, quindi non c'è alcuna infrastruttura X11 da condividere con il container. Come posso avviare un'applicazione grafica nel contenitore e mostrarla sul mio desktop? C'è un modo per legare in XWayland?


Non sono sicuro di come rispondere alla tua domanda nel modo giusto (non l'ho mai fatto prima) ma sul mio sistema il socket di dominio unix utilizzato da Wayland è /run/user/1000/wayland-0per il mio desktop personale.
Bratchley,

Risposte:


16

Come dici che stai eseguendo Fedora 25 con Wayland, suppongo che tu stia usando il desktop Gnome-Wayland.

Gnome-Wayland esegue Xwayland per supportare le applicazioni X. Puoi condividere l' accesso a Xwayland come hai fatto prima con Xorg.

Il comando di esempio XAUTHORITYnon è presente e non viene menzionato xhost. È necessario uno di questi modi per consentire alle applicazioni X nella finestra mobile di accedere a Xwayland (o qualsiasi X). Poiché tutto ciò non è correlato a Wayland, mi riferisco a Come è possibile eseguire applicazioni GUI nel contenitore docker? su come eseguire le applicazioni X nella finestra mobile.

In breve, due soluzioni con xhost:

  1. Consenti al tuo utente locale l'accesso tramite xhost: xhost +SI:localuser:$(id -un)e crea un utente simile con l'opzione di esecuzione docker:--user=$(id -u):$(id -g)
  2. Scoraggiato: consentire l'accesso root a X con xhost +SI:localuser:root

Trappola correlata : X utilizza normalmente la memoria condivisa (estensione X MIT-SHM). I contenitori Docker sono isolati e non possono accedere alla memoria condivisa. Ciò può comportare il rendering di anomalie e errori di accesso alla RAM. Puoi evitarlo con l'opzione Esegui finestra mobile --ipc=host. Ciò influisce sull'isolamento del contenitore poiché disabilita la spaziatura dei nomi IPC. Confronta: https://github.com/jessfraz/dockerfiles/issues/359


Per eseguire le applicazioni Wayland nella finestra mobile senza X, è necessario un compositore wayland in esecuzione come Gnome-Wayland o Weston. Devi condividere il socket Wayland. Lo trovi in XDG_RUNTIME_DIRe il suo nome è memorizzato in WAYLAND_DISPLAY. Poiché XDG_RUNTIME_DIRconsente l'accesso solo al proprietario, è necessario lo stesso utente nel contenitore dell'host. Esempio:

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

Anche le applicazioni QT5 necessitano -e QT_QPA_PLATFORM=waylande devono essere avviate conimagename dbus-launch waylandapplication


x11docker per applicazioni X e Wayland nella docker è una soluzione tutto in uno. Si preoccupa anche di preservare l'isolamento del contenitore (che si perde se si condivide semplicemente la visualizzazione dell'host X come nell'esempio).


Cosa succede se non sono sicuro che l'app che voglio eseguire sia X o Wayland? C'è qualcosa di generico che posso passare in modo che possa determinare automaticamente se XWayland è necessario o no?
Oxwivi,


1
@ShN È possibile eseguire Weston come client in un altro compositore di Wayland. All'interno di questo client Weston è possibile eseguire Xwayland con applicazioni X. Con x11docker:x11docker --weston-xwayland imagename application
mviereck il

1
@Shn Inoltre è possibile eseguire Xwayland direttamente come client Wayland: Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application. Xwayland coprirà l'intero display; puoi spostarlo con <Super> <LeftMouseButton>. Con x11docker: x11docker --xwayland imagename application.
mviereck,

1
@ShN Hai bisogno di un server X in ogni caso. Per evitare X sull'host, fornisco x11docker / xwayland . Se un giorno xpraviene portato su GTK3 + python3 , fornirà ulteriori possibilità con finestre senza soluzione di continuità. Sono possibili configurazioni invisibili con Xvfbnel contenitore. Per una discussione dettagliata puoi aprire un ticket di emissione su github .
mviereck,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.