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


15

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가 사용하는 유닉스 도메인 소켓이 /run/user/1000/wayland-0개인 데스크탑에 있습니다.
Bratchley

답변:


16

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 디스플레이를 공유하면 손실됩니다).


실행하려는 앱이 X 또는 Wayland인지 확실하지 않은 경우 어떻게해야합니까? XWayland가 필요한지 여부를 자동으로 결정할 수 있도록 전달할 수있는 일반적인 것이 있습니까?
Oxwivi


1
@ShN 다른 Wayland 컴포 지터에서 Weston을 클라이언트로 실행할 수 있습니다. 이 클라이언트 Weston 내에서 X 응용 프로그램으로 Xwayland를 실행할 수 있습니다. x11docker 사용 :x11docker --weston-xwayland imagename application
mviereck

1
@Shn 또한 Xwayland를 Wayland 클라이언트로 직접 실행할 수 있습니다 Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application. Xwayland는 전체 디스플레이를 다룰 것입니다. <Super> <LeftMouseButton>으로 이동할 수 있습니다. x11docker 사용시 : x11docker --xwayland imagename application.
mviereck

1
@ShN 어떤 경우 든 X 서버가 필요합니다. 호스트에서 X를 피하기 위해 x11docker / xwayland를 제공합니다 . xpra언젠가 GTK3 + python3으로 포팅 되면 , 이음매없는 윈도우로 더 많은 가능성을 제공 할 것입니다. Xvfb컨테이너에서 보이지 않는 설정이 가능합니다 . 자세한 내용은 github 에서 발행 티켓을 열 수 있습니다 .
mviereck

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.