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?


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).


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.