Jak mogę uruchomić aplikację graficzną w kontenerze w Wayland?

15

Kiedy korzystałem z pulpitu X11, mogłem uruchamiać aplikacje graficzne w kontenerach dokerów, udostępniając $DISPLAYzmienną i /tmp/X11-unixkatalog. 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?

Willi Ballenthin
źródło
Nie wiem, jak odpowiedzieć na twoje pytanie we właściwy sposób (nigdy wcześniej tego nie robiłem), ale w moim systemie gniazdo domeny unix używane przez Waylanda znajduje się na /run/user/1000/wayland-0moim osobistym pulpicie.
Bratchley

Odpowiedzi:

16

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 XAUTHORITYi 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:

  1. 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)
  2. 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_DIRzezwala 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=waylandi 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).

mviereck
źródło
Co jeśli nie jestem pewien, czy aplikacja, którą chcę uruchomić, to X lub Wayland? Czy jest coś ogólnego, co mogę przekazać, aby mógł automatycznie ustalić, czy XWayland jest potrzebny, czy nie?
Oxwivi,
1
@ShN Możliwe jest uruchomienie Westona jako klienta w innym kompozytorze Wayland. Wewnątrz tego klienta Weston możesz uruchomić Xwayland z aplikacjami X. Z x11docker:x11docker --weston-xwayland imagename application
mviereck
1
@Shn Ponadto można uruchomić Xwayland bezpośrednio jako klient Wayland: 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.
mviereck
1
@ShN W każdym razie potrzebujesz serwera X. Aby uniknąć X na hoście, dostarczam x11docker / xwayland . Jeśli pewnego dnia xprazostanie przeniesiony do GTK3 + python3 , zapewni dalsze możliwości dzięki płynnym oknom. Możliwe są niewidoczne konfiguracje z Xvfbpojemnikiem. W celu szczegółowej dyskusji możesz otworzyć bilet do wydania na github .
mviereck
0

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)

dragon788
źródło