Kiedy korzystałem z pulpitu X11, mogłem uruchamiać aplikacje graficzne w kontenerach dokerów, udostępniając $DISPLAY
zmienną i /tmp/X11-unix
katalog. Na przykład:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Teraz korzystam z Fedory 25 z Waylandem, więc nie ma infrastruktury X11 do udostępnienia kontenerowi. Jak mogę uruchomić aplikację graficzną w kontenerze i wyświetlić ją na pulpicie? Czy jest jakiś sposób na powiązanie w XWayland?
/run/user/1000/wayland-0
moim osobistym pulpicie.Odpowiedzi:
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 nimxhost
. 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:
xhost +SI:localuser:$(id -un)
i utwórz podobnego użytkownika z opcją uruchamiania dokera:--user=$(id -u):$(id -g)
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/359Aby 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 wWAYLAND_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: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).
źródło
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland obejmie cały ekran; możesz go przenosić za pomocą <Super> <LeftMouseButton>. Z x11docker:x11docker --xwayland imagename application
.xpra
zostanie przeniesiony do GTK3 + python3 , zapewni dalsze możliwości dzięki płynnym oknom. Możliwe są niewidoczne konfiguracje zXvfb
pojemnikiem. W celu szczegółowej dyskusji możesz otworzyć bilet do wydania na github .Poleciłbym Sommeliera od Google. Umożliwia uruchamianie aplikacji Wayland OR X11 i zapewnia gniazda, których szukają, aby przenieść je na bieżący serwer wyświetlania. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Proste instrukcje powinny działać na każdym systemie, nie tylko Crouton / Crostini w ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
źródło