docker上で動く猫と遊ぶ(X11のネットワーク周りの確認)
最近、Linuxをちゃんと学び直したいと思って、LPICをレベル1からやっています。 101は受かったので、次は102です。
その102の試験範囲に、X11周りの問題がでるので、この辺をdockerを使って色々試してみます。
今回は、X11のネットワーク周りの確認のため、onekoというX11クライアントをdockerで起動し、サーバ側で動かしてみるというところまでやりたいと思います。
インストールするX11アプリケーション
oneko 猫がマウスを追いかけてきます。 https://packages.ubuntu.com/ja/bionic/oneko
環境
- 実機(Xサーバ)
cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
- dockerコンテナ(Xクライアント)
ubuntu:18.04
イメージ
socket経由で猫を飛ばす
Dockerfile
oneko
とX11アプリケーションを動作させるため x11-apps
をインストールします。
FROM ubuntu:18.04 RUN apt-get update && apt-get install -y x11-apps RUN apt-get install -y oneko ENTRYPOINT /usr/games/oneko
docker側ではユーザがrootで実行されるので、xhostを指定してあげる必要があります。 (ホスト側と同じユーザで実行していれば以下の設定は不要)
xhost + local:root
dockerコマンド
docker run --rm -v /tmp/.X11-unix/:/tmp/.X11-unix/ -e DISPLAY=$DISPLAY -it oneko_oneko oneko
ピコっと猫が出てきました。マウスを追いかけてきます。 (そういえば、ジオシティーズ全盛期、HP上でこういうの動かせるようになってるページめちゃくちゃあったなぁ。)
TCP経由で猫を飛ばす
- ディスプレイマネージャーの設定で、TCPが許可されているか確認
私の環境はgdm3なので、
/etc/gdm3/custom.conf
に
[security] DisallowTCP=false
があるか確認し、なければ追加します。
変更を反映させるために ディスプレイマネージャーをリスタートします。(デスクトップの再起動)
すると、以下のように6000をLISTENするようになっているはずなので、
sudo netstat -anp | grep 6000 tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 2563/Xorg tcp6 0 0 :::6000 :::* LISTEN 2563/Xorg
以下のコマンドを叩くと、猫が出てくるはずです。
docker run --rm --net host -e DISPLAY=$DISPLAY -it oneko_oneko oneko
本来のサーバ/クライアントの設定としては、$DISPLAY
にXサーバを指定、xhost
に許可したいXクライアントを指定していくらしいのですが、host, ipを調べて設定するのが、ちょっと面倒くさいというのがあるので、今回はこのやり方で対応しました。
Windows(vcxsrv)や、Mac(XQuartz)でもX11が使えるので、上手く使えば、重いIDEなどを分離させたいとき、複数環境使いたいときなどに便利かもしれないなという気持ちでした。
参考
- jessfraz/dockerfiles https://github.com/jessfraz/dockerfiles 参考になりそうなDockerfileたち
- DockerでXWindowを使う https://blog.sky-net.pw/article/90