macOS에서 X11 앱 시작(Docker+Xvfb+VNC)



1. 개요



macOS에서 X11 환경을 필요로 하는 앱을 실행하고 싶은 일, 가끔 없습니까? 난 있습니다.
macOS 상의 X11 환경(XQuartz)을 이용하는 것도 하나의 손입니다만, 좀더 간편하게 사용할 수 없는가와 Docker, Xvfb, VNC를 조합하는 방법을 시도해 보았습니다.
아직 상세한 검증은 실시하고 있지 않습니다만, 문제 없게 이용할 수 있을 것 같습니다.

2. 사용할 소프트웨어



이번 사용한 소프트웨어는 다음과 같습니다.
  • Docker
  • 말하지 않고 알려진 컨테이너형의 가상화를 실시하는 소프트웨어입니다.
  • 영어 버전 Wikipedia: htps // 엔.ぃきぺぢ아. 오 rg / ぃき / 도 c 케 r_ (그 f와 ぁ레)

  • Xvfb: X virtual framebuffer
  • 가상 프레임 버퍼 (드로잉 대상)가있는 디스플레이 서버입니다. X11 프로토콜을 지원하며 실제 디스플레이 환경과는 독립적인 프레임 버퍼를 만들 수 있습니다.
  • 영어 버전 Wikipedia: htps // 엔.ぃきぺぢ아. 오 RG / 우키 / Xvfb

  • VNC: Virtual Network Computing
  • 소위 "원격 데스크톱"을 실현하는 소프트웨어 중 하나입니다.
  • 영어 버전 Wikipedia: htps // 엔.ぃきぺぢ아. 오 rg / uuki / ゔ r tha l_ 네트 rk_ 코 m 푸친 g


  • 3. 환경



    이번 시도한 환경은 다음과 같습니다.
  • 호스트 :
  • OS: macOS Mojave 10.14.5
  • Mac용 Docker Desktop: 2.1.0.1 (37199)
  • Docker Engine: 19.03.1

  • TigerVNC Viewer: 1.9.0

  • 컨테이너:
  • OS: Ubuntu 18.04.3 LTS

  • $ sw_vers
    ProductName:    Mac OS X
    ProductVersion: 10.14.5
    BuildVersion:   18F132
    
    $ docker version
    Client: Docker Engine - Community
     Version:           19.03.1
     API version:       1.40
     Go version:        go1.12.5
     Git commit:        74b1e89
     Built:             Thu Jul 25 21:18:17 2019
     OS/Arch:           darwin/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.1
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.5
      Git commit:       74b1e89
      Built:            Thu Jul 25 21:17:52 2019
      OS/Arch:          linux/amd64
      Experimental:     true
     containerd:
      Version:          v1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc8
      GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    
    $ docker image pull ubuntu:18.04
    18.04: Pulling from library/ubuntu
    Digest: sha256:d1d454df0f579c6be4d8161d227462d69e163a8ff9d20a847533989cf0c94d90
    Status: Image is up to date for ubuntu:18.04
    docker.io/library/ubuntu:18.04
    
    $ docker container run --tty --rm ubuntu:18.04 cat /etc/lsb-release
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=18.04
    DISTRIB_CODENAME=bionic
    DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
    

    4. xeyes 실행하기



    간단한 X11 앱으로 주목할만한 xeyes 명령을 실행해 보겠습니다.host$는 호스트 시스템을, docker$는 Docker 컨테이너 내에서 실행을 나타냅니다.

    4.1. 사전 준비



    Docker 컨테이너를 시작하고 필요한 Ubuntu 패키지를 설치합니다. xeyesx11-apps에 포함되어 있습니다.
    host$ docker container run --interactive --tty --rm --publish 5900:5900 ubuntu:18.04 /bin/bash
    
    docker$ apt-get update
    docker$ DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends xvfb x11vnc x11-apps
    docker$ dpkg -l | grep -E "(xvfb|x11vnc|x11-apps)"
    ii  x11-apps                   7.7+6ubuntu1             amd64        X applications
    ii  x11vnc                     0.9.13-3                 amd64        VNC server to allow remote access to an existing X session
    ii  x11vnc-data                0.9.13-3                 all          data files for x11vnc
    ii  xvfb                       2:1.19.6-1ubuntu4.3      amd64        Virtual Framebuffer 'fake' X server
    

    4.2. xeyes 시작


    xvfb-run 명령을 통해 xeyes를 실행합니다.xvfb-run는 기본적으로 디스플레이 번호:99로 가상 디스플레이를 만듭니다.
    또한 기본적으로 PID를 포함하는 임의의 인증 파일을 생성하지만 여기에서는 /tmp/xvfb-run에 고정되어 있습니다.
    docker$ xvfb-run --auth-file /tmp/xvfb-run -- xeyes &
    

    4.3. VNC 서버 시작



      만든 가상 디스플레이에 액세스하기 위해 VNC 서버를 시작합니다.
    이번에는 VNC 서버 중 하나 x11vnc를 사용했습니다.
    docker$ x11vnc -display :99 -auth /tmp/xvfb-run
    

    4.4. VNC 클라이언트에서 액세스



    부팅된 VNC 서버에 VNC 클라이언트(뷰어)로 연결합니다. 이번에는 VNC 클라이언트 중 하나인 "TigerVNC Viewer v1.9.0"을 사용했습니다.x11vnc5900/tcp에서 연결을 기다리고 있습니다.
    또한 docker container run--publish 옵션으로 포트를 전달하므로 localhost에 연결합니다.



    무사히 접속할 수 있어 마우스 커서의 위치에 따라 눈동자가 움직이는 것을 확인했습니다.



    5. 발전



    이번에는 단일의 X11 앱을 기동했습니다만, Fluxbox등 윈도우 매니저를 기동하는 것으로, 데스크탑 환경을 실현할 수도 있다고 생각합니다. (시험하지 않음)

    또, X의 가상 디스플레이는 FFmpeg로 동영상을 촬영할 수도 있으므로, 동영상으로 테스트의 증빙(에비던스)을 기록하는 등의 용도에도 사용할 수 있을 것 같습니다. 꿈이 퍼지네요!

    6. 참고


  • Xvfb로 만든 가상 디스플레이에 원격 데스크톱 연결 - Ishida 일기
  • 좋은 웹페이지 즐겨찾기