本文へ移動
vast-cowのブログ
前のページへ戻る

Rootless Docker コンテナ内で X11 アプリを使う(xauth で MIT-MAGIC-COOKIE を渡す)

この記事を編集

Rootless Docker はホスト側の権限を絞れて便利ですが、GUI アプリ(X11)をコンテナから表示したいときに少しだけハマりどころがあります。 この記事では ホストの X サーバに対して、コンテナ側へ xauth の Cookie を渡し、rootless Docker コンテナ内から X11 アプリを起動する手順をまとめます。

前提


全体像(何をしているか)

X11 のアクセス制御はざっくり次の2段です。

  1. どの DISPLAY に接続するか(例: 10.0.2.2:10)
  2. 接続を許可する認証情報(MIT-MAGIC-COOKIE)を渡すか

この記事の手順は、ホストが保持している MIT-MAGIC-COOKIE-1 をホスト側で確認し、コンテナ側で xauth add して .Xauthority を作る、という流れです。


まずホストで、今の DISPLAY に紐づく Cookie を確認します。

$ xauth list "$DISPLAY"
hostname/unix:10  MIT-MAGIC-COOKIE-1  0a1b2c...

ここで出てくる 0a1b2c... が Cookie です。 あとでコンテナ側に xauth add するので、コピーしておきます。

補足 hostname/unix:10 の末尾 :10 はディスプレイ番号です。環境によって :0 だったり :1 だったりします。


2. コンテナを起動する(rootless Docker)

次にコンテナを起動します。例として wine イメージを使っていますが、任意のイメージで OK です。

$ docker run -it --rm --name wine-x11 \
  --network host \
  -e DISPLAY=host.docker.internal:12.0 \
  -v ./root:/root \
  -v ./work:/work \
  wine bash

オプションの意図

注意 host.docker.internal は環境によって効かない場合があります。その場合でも、後段の DISPLAY=10.0.2.2:10 のように ホスト側 IP を明示すれば進められることが多いです。


コンテナに入ったら、ホストで見た Cookie を使って xauth add します。

# xauth add 10.0.2.2:10 MIT-MAGIC-COOKIE-1 "${cookie}"

よく見る warning について

実行時に以下が出ることがあります。

xauth:  file /root/.Xauthority does not exist

これは 単に .Xauthority がまだ無いだけなので、warning として無視して OKです。 (xauth add によってファイルが新規作成されます。)


4. xev で疎通確認する

最後に X11 クライアントを起動して、画面が出るか確認します。ここでは xev を例にします。

# DISPLAY=10.0.2.2:10 xev

ウィンドウが開き、キー入力やマウスイベントが流れてくれば成功です 🎯


うまくいかないときのチェックポイント


まとめ

rootless Docker でも、ポイントは単純で、

これだけで X11 アプリを動かせます。


この記事を編集
この記事を共有:

コメント


前の記事
YAMNetを用いた音声セグメンテーション:Speech・Music・Silenceの検出
次の記事
Tailscaleで同一拠点に複数マシンがあるなら `tailscaled` のポートをずらしたほうがよい