Armadilloフォーラム

X Window Systemを起動するコンテナとGUIアプリを起動するコンテナ間の連携と画面表示について

h-yuusuke

2022年1月25日 18時10分

お世話になっております。

掲題の件に関して下記質問がございます。

製品マニュアル「9.1.9.1. Waylandを扱う」(P.112)において、westonを起動したコンテナと、westonを使用するアプリを起動させるコンテナで"XDG_RUNTIME_DIR"を共有することでwestonを使用するアプリを起動できるとあります。

上記と同じようなことをX Window Systemでも可能でしょうか?
具体的には下記を想定しております。
・以下の2つのコンテナを用意。
 ①X Window Systemを起動するコンテナ (at-debian-imageからコンテナイメージを作成)
 ②GUIアプリ(Firefox)を起動するコンテナ (alpine-linuxベースでコンテナイメージを作成)
・②のコンテナで起動するFirefoxブラウザ画面を①のコンテナで起動しているX Window Systemを利用してArmadillo-IOT G4に接続されているディスプレイに表示させる。

コメント

at_dominique.m…

2022年1月26日 9時03分

h-yuusukeさん

X11では、DISPLAYの環境変数を設定すれば以下のアドレスにコネクトしようとします:
- @"/tmp/.X11-unix/X$DISPLAY" (abstract unix socket)
- /tmp/.X11-unix/X$DISPLAY (unix socket)
- localhost:(6000+DISPLAY) (tcp)(サーバ側にデフォルトでlistenしません)

なのでどれかを共有すれば大丈夫です。
abstract unix socketはネットワークのnamespaceによる共有ができます、二つのコンテナを同じpodにすればDISPLAYの環境変数さえ設定すれば使えるはずです。/etc/atmark/containersのコンフィグの例が少ないが、以下のように使えます

───────┬──────────────────────────────────────────────────────────────
       │ File: /etc/atmark/containers/mypod.conf
───────┼──────────────────────────────────────────────────────────────
   1   │ type=pod
   2   │ ports="80:80 443:443"
───────┴──────────────────────────────────────────────────────────────
───────┬──────────────────────────────────────────────────────────────
       │ File: /etc/atmark/containers/alpine.conf
───────┼──────────────────────────────────────────────────────────────
   1   │ image=docker.io/alpine
   2   │ pod=mypod
───────┴──────────────────────────────────────────────────────────────

普通のunix socketはファイルとして共有できますので、そちらは/tmpか/tmp/.X11-unixをボリュームにしたら使えるはずです。

申し訳ないがこちらで実際に試していませんので、何か問題あったらまた質問してください。

よろしくお願いします。

h-yuusuke

2022年1月26日 14時52分

ご返信ありがとうございます。

ご教授いただいた内容をもとに以下の手順を実施しましたが、X WindowコンテナとGUIアプリのコンテナとの連携ができておりません。

・実施手順
①環境変数DISPLAYを設定

export DISPLAY=192.168.1.101:0.0

②X WindowコンテナおよびGUIアプリコンテナのコンフィグファイルに下記を追加

volumes="/tmp/.X11-unix:/tmp/.X11-unix"
append_args --env="DISPLAY"

③GUIアプリコンテナ起動後、コンテナにattachして「firefox」コマンドを実行

上記③実施時に下記のエラーが表示され、firefoxが起動できませんでした。

Unable to init server: Broadway display type not supported: 192.168.1.101;0.0
Error: cannot open display: 192.168.1.101;0.0

解決策がございましたら、ご教授願います。

at_dominique.m…

2022年1月26日 15時10分

h-yuusukeさん、

> export DISPLAY=192.168.1.101:0.0

DISPLAYのhostnameの部分を設定すると、クライアントはTCPの手段しか試さないのでここで/tmpを共有したらDISPLAYを :0 か :0.0 にしてください。
DISPLAYについてはXのman pageに詳しく説明されてます。

なお、export DISPLAYより、コンフィグファイルに直接に設定すれば扱いやすいと思います。例えば、append_args --env "DISPLAY=:0"

> volumes="/tmp/.X11-unix:/tmp/.X11-unix"
> append_args --env="DISPLAY"

(サーバー側のコンテナにDISPLAYの設定は不要です。邪魔になるかもしれませんので、クライアントになるコンテナだけにしてみて下さい)

よろしくお願いします

h-yuusuke

2022年1月26日 18時34分

返信ありがとうございます。

DISPLAYの設定を":0"にすることでディスプレイにFirefox画面が表示されました。

ご対応頂きありがとうございました。