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

onekoX11アプリケーションを動作させるため 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上でこういうの動かせるようになってるページめちゃくちゃあったなぁ。)

f:id:takapi86:20190310222854p:plain

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などを分離させたいとき、複数環境使いたいときなどに便利かもしれないなという気持ちでした。

参考