DockerでXサーバを動かしてGUIを直接表示する
最近、LinuxのノートPC上でDockerのサーバを建てて生活しています。 そのノートPC上では、プログラミング・ブラウジング・ツイッター・Slack・VTuber動画を見たりといった、あらゆることをしています。これらのことをするためにはGUI環境が必要で、そのためにXサーバを"直接"動かしています。
アーキテクチャはこんな感じです:
ここではこの環境の構築手順について解説していきます。
0. ホスト環境
Ubuntu Server 16.04.3 LTS (64bit)
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
1. XサーバとXクライアントの入ったコンテナの作成
Dockerfile:
FROM ubuntu:16.04 MAINTAINER kunst1080 kontrapunkt1080@gmail.com RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ dbus \ dbus-x11 \ xorg \ xserver-xorg-legacy \ xinit \ xterm \ && rm -rf /var/lib/apt/lists/* RUN sed -i "s/allowed_users=console/allowed_users=anybody/;$ a needs_root_rights=yes" /etc/X11/Xwrapper.config ARG user=user ARG uid=1000 RUN useradd ${user} -u $uid -m -G adm,dialout,cdrom,sudo,audio,dip,video,plugdev,netdev -s /bin/bash CMD [ "/usr/bin/startx", "--", "vt7" ]
- 「xserver-xorg-legacy」は一般ユーザで
startx
するために必要です - sed で「/etc/X11/Xwrapper.config」を編集していますが、これも一般ユーザで
startx
するために必要な設定です
2. コンテナの起動方法
$ docker run --rm --privileged \ --shm-size=8gb \ -v /run/udev:/run/udev \ -v /run/dbus:/run/dbus \ -v /run/systemd:/run/systemd \ $IMAGE
--privileged
オプションは、GUIを表示するために必要(特権コンテナ)/run/udev
はマウスとキーボードを使用するために必要/run/dbus
と/run/systemd
は Systemd を使うために必要。Systemd を使用しなければこれらのオプションは不要--shm-size
オプションは共有メモリのサイズを指定します。Google Chrome などのアプリケーションを使用するときはこのオプションは必須。(初期値はたったの64MB)
3. 実際の設定
上記の1と2は解説用に必要なエッセンスを取り出した内容です。 私が実際に使っている設定は以下のリポジトリにあります。
- docker-x11-base: Xサーバ、Xクライアント、よく使う各種ツール・ライブラリ
- docker-x11-wm: docker-x11-base + window manager
- docker-desktop: docker-x11-wm + アプリケーションいろいろ(Googl ChromeとかVSCodeとか)
必要に応じてアップデートしていますが、だいたいこんな感じでやって〼
補足 (2018/03/19 追記)
「なぜあえてこんな変なことをやっているのか?」という問いについては以下のスライドで触れているので、併せてご覧ください。
www.slideshare.net
参考URL
- https://docs.docker.com/engine/reference/run/
- How to start Xorg-server inside plain chroot? - Super User
- Ubuntu 16.04 (EE) xf86OpenConsole: Cannot open virtual console 2 (Permission denied) · GitHub
- [SOLVED] Unable to startx as user / Newbie Corner / Arch Linux Forums
- Xorg - ArchWiki Rootless Xorg
- Arch Linux - News: xorg-server 1.16 is now available