Wayland의 컨테이너에서 그래픽 애플리케이션을 실행하는 방법은 무엇입니까?

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에서 바인딩할 수 있는 방법이 있나요?

답변1

Wayland를 사용하여 Fedora 25를 실행하고 있다고 말씀하셨듯이 저는 Gnome-Wayland 데스크톱을 사용하고 있다고 가정합니다.

Gnome-Wayland는 Xwayland를 실행하여 X 응용 프로그램을 지원합니다. 당신은 공유할 수 있습니다엑스웰랜드Xorg를 사용하기 전과 같이 액세스합니다.

귀하의 예제 명령이 누락되어 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

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


달리기웨이랜드X 없이 Docker에서 애플리케이션을 실행하려면 Gnome-Wayland 또는 Weston과 같은 실행 중인 Wayland 컴포지터가 필요합니다. 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


x11dockerDocker에서 X 및 Wayland 애플리케이션과 함께 작동합니다.올인원 솔루션입니다. 또한 컨테이너를 격리된 상태로 유지하는 데에도 신경을 씁니다(귀하의 예에서처럼 호스트 X 디스플레이가 단순히 공유된 경우 손실될 수 있음).

답변2

Google 소믈리에를 추천합니다. 이를 통해 Wayland 또는 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)

관련 정보