[unix] Wayland의 컨테이너에서 그래픽 응용 프로그램을 어떻게 실행할 수 있습니까?

X11 데스크톱을 사용할 때 $DISPLAY변수와 /tmp/X11-unix디렉토리를 공유하여 도커 컨테이너에서 그래픽 응용 프로그램을 실행할 수있었습니다 . 예를 들면 다음과 같습니다.

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

이제 Wayland를 실행하는 Fedora 25를 사용하고 있으므로 컨테이너와 공유 할 X11 인프라가 없습니다. 컨테이너에서 그래픽 응용 프로그램을 시작하고 데스크탑에 표시하려면 어떻게해야합니까? XWayland와 연결하는 방법이 있습니까?



답변

Wayland와 함께 Fedora 25를 실행한다고 말하면 Gnome-Wayland 데스크탑을 사용한다고 가정합니다.

Gnome-Wayland는 X 응용 프로그램을 지원하기 위해 Xwayland를 실행합니다. Xorg와 마찬가지로 Xwayland 액세스 를 공유 할 수 있습니다 .

예제 명령이 누락 XAUTHORITY되었으며 언급하지 않았습니다 xhost. docker의 X 응용 프로그램이 Xwayland (또는 모든 X)에 액세스 할 수있게하려면이 방법 중 하나가 필요합니다. 이 모든 것이 Wayland와 관련이 없으므로 Docker 컨테이너에서 GUI 응용 프로그램어떻게 실행할 수 있습니까?를 참조하십시오 . docker에서 X 응용 프로그램을 실행하는 방법에 대해 설명합니다.

간단히 말해서 xhost를 사용하는 두 가지 솔루션은 다음과 같습니다.

  1. xhost를 통한 로컬 사용자 액세스를 허용 xhost +SI:localuser:$(id -un)하고 docker run 옵션을 사용하여 유사한 사용자를 작성하십시오.--user=$(id -u):$(id -g)
  2. 권장하지 않음 : X에 대한 루트 액세스 허용 xhost +SI:localuser:root

관련 Pitfall : X는 일반적으로 공유 메모리 (X 확장 MIT-SHM)를 사용합니다. 도커 컨테이너는 격리되어 있으며 공유 메모리에 액세스 할 수 없습니다. 이로 인해 렌더링 결함 및 RAM 액세스 오류가 발생할 수 있습니다. docker run 옵션으로 피할 수 있습니다 --ipc=host. IPC 네임 스페이스를 비활성화하므로 컨테이너 격리에 영향을줍니다. 비교 : https://github.com/jessfraz/dockerfiles/issues/359


X없이 도커에서 Wayland 애플리케이션 을 실행하려면 Gnome-Wayland 또는 Weston과 같은 실행중인 웨이 랜드 컴포 지터가 필요합니다. Wayland 소켓을 공유해야합니다. 당신은 그것을 발견 XDG_RUNTIME_DIR하고 그 이름은에 저장됩니다 WAYLAND_DISPLAY. 으로 XDG_RUNTIME_DIR만 해당 소유자에 대한 액세스를 허용하면 호스트로 컨테이너에 동일한 사용자가 필요합니다. 예:

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

QT5 응용 프로그램도 다음 -e QT_QPA_PLATFORM=wayland과 같이 시작해야합니다.imagename dbus-launch waylandapplication


도커 의 X 및 Wayland 애플리케이션 용 x11docker 는 모두 하나의 솔루션입니다. 또한 컨테이너 격리를 유지하는 데 관심이 있습니다 (예와 같이 단순히 호스트 X 디스플레이를 공유하면 손실됩니다).


답변

Sommelier by Google을 추천합니다. Wayland OR X11 앱을 시작하고 해당 앱이 현재 디스플레이 서버로 가져 오기 위해 찾고있는 소켓을 제공합니다.
https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/

ChromeOS의 Crouton / Crostini뿐만 아니라 모든 시스템에서 작동하는 간단한 방법입니다.

https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)


답변