Jak mówisz, że używasz Fedory 25 z Waylandem, zakładam, że używasz Gnome-Wayland.
Gnome-Wayland obsługuje Xwayland w celu obsługi aplikacji X. Możesz udostępnić dostęp do Xwayland, tak jak wcześniej, Xorg.
Twoje przykładowe polecenie pomija XAUTHORITY
i nie wspominasz o nim xhost
. Potrzebujesz jednego z tych sposobów, aby zezwolić aplikacjom X w oknie dokowanym na dostęp do Xwayland (lub dowolnego X). Ponieważ wszystko to nie jest związane z Waylandem, odsyłam do Jak uruchomić aplikacje GUI w kontenerze dokera? na temat uruchamiania aplikacji X w oknie dokowanym.
Krótko mówiąc, dwa rozwiązania z xhostem:
- Zezwól na dostęp lokalnego użytkownika za pośrednictwem xhost:
xhost +SI:localuser:$(id -un)
i utwórz podobnego użytkownika z opcją uruchamiania dokera:--user=$(id -u):$(id -g)
- Zniechęcony: Zezwól na dostęp root do X za pomocą
xhost +SI:localuser:root
Powiązany problem : X zwykle używa pamięci współdzielonej (rozszerzenie X MIT-SHM
). Kontenery dokerów są izolowane i nie mogą uzyskać dostępu do pamięci współużytkowanej. Może to prowadzić do renderowania błędów i awarii dostępu do pamięci RAM. Można tego uniknąć dzięki opcji uruchamiania dokera --ipc=host
. Wpływa to na izolację kontenera, ponieważ wyłącza przestrzeń nazw IPC. Porównaj: https://github.com/jessfraz/dockerfiles/issues/359
Aby uruchomić aplikacje Wayland w oknie dokowanym bez X, potrzebujesz działającego kompozytora Wayland, takiego jak Gnome-Wayland lub Weston. Musisz udostępnić gniazdo Wayland. Znajdziesz go XDG_RUNTIME_DIR
, a jego nazwa jest przechowywana w WAYLAND_DISPLAY
. Ponieważ XDG_RUNTIME_DIR
zezwala tylko na dostęp dla swojego właściciela, potrzebujesz tego samego użytkownika w kontenerze co na hoście. Przykład:
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
Aplikacje QT5 również potrzebują -e QT_QPA_PLATFORM=wayland
i muszą zostać uruchomioneimagename dbus-launch waylandapplication
x11docker dla aplikacji X i Wayland w oknie dokowanym to kompleksowe rozwiązanie. Dba również o zachowanie izolacji kontenera (która gubi się, jeśli po prostu udostępnisz ekran hosta X jak w twoim przykładzie).
/run/user/1000/wayland-0
moim osobistym pulpicie.