DockerでXサーバを動かしてGUIを直接表示する
最近、LinuxのノートPC上でDockerのサーバを建てて生活しています。 そのノートPC上では、プログラミング・ブラウジング・ツイッター・Slack・VTuber動画を見たりといった、あらゆることをしています。これらのことをするためにはGUI環境が必要で、そのためにXサーバを"直接"動かしています。
アーキテクチャはこんな感じです:
ここではこの環境の構築手順について解説していきます。
0. ホスト環境
Ubuntu Server 16.04.3 LTS (64bit)
|
|
1. XサーバとXクライアントの入ったコンテナの作成
Dockerfile:
|
|
- 「xserver-xorg-legacy」は一般ユーザで
startx
するために必要です - sed で「/etc/X11/Xwrapper.config」を編集していますが、これも一般ユーザで
startx
するために必要な設定です
2. コンテナの起動方法
|
|
--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