俺がdockerでX11なアプリの表示確認をするやり方
はじめに
この記事は、@kjunichiの2014年パーソナルアドベントカレンダーの5日目の記事です。
dockerで作業していて、かつホストマシンのXサーバーを動かせない状況がたまにある。そんな時でも、ビルドしたXクライアントが起動できるか確認したり、初期表示だけでも見たいということがある。 あと、noVNCとかWebSocket使ってるから俺の日中の環境からは使えないんでそこんとこもよろしく。 cloud9 IDEの端末からsshして作業しているような状況を想像すると良いのかなぁ。
Xvfbがある
お手軽にXクライアントをXvfbで動かせるxvfb-runというラッパーがUbuntuなどでは用意されている。
Xvfbに-acオプションを渡す必要がある
Xクライアントを動かすだけなら、黙ってxvfb-runコマンドで良いのだが、スクリーンショットを取ったり、xlogoも追加してみたくなったりした場合、セキュリティに厳しい昨今、Xvfbの起動時にオプションを付けないと、後からクライアントを起動中のXvfbサーバーに表示するのを拒否される模様。
-acはaccess control offという意味。xhost +とかしないで使えるってことですね。(xauthいまだに使えない人)
xvfb-runの-sオプションに指定することで、Xvfb本体にオプションを渡すことが出来る。
この-acオプションがないと、後続のコマンドを動かす際にDISPLAY変数を:99に設定(xvfb-runで特に指定しないとディスプレイ番号が99に設定される。)しても接続できずエラーになってしまう。
xvfb-run -s -ac xlogo&
たいていのXクライアントは&をつけてバックグラウンドで実行しないと、次の作業が出来ない。
画面のキャプチャをする
xwdコマンドで行える
DISPLAY=:99 xwd -root >dump.xwd
-rootを付けないと、キャプチャーするウィンドウの選択待ちになってしまう。
キャプチャを表示するには
表示するにはxuwdコマンドがあるが、OSXやWindowsでは結局Xサーバーが必要となってしますので、画像形式を今どきの画像形式に変換する。
OSXのHomebrewのImagemagickは--with-x11を指定する必要があった。これがないとXWDフォーマットを理解してくれない。
dockerのコンテナンにImageMagickを入れる手もあるが、無駄にコンテナサイズを増やすのも無駄なので、ホスト側のコマンドを整備した方が良い。
以下の指定で、ImageMagickを--with-x11オプション付きで再インストール出来る。
brew reinstall --with-x11 imagemagick
Link
関連記事
- Docker入れてからのVirtualBoxのアップデート
- Dockerやって色々勉強になってる件
- OSXでDocker入れるとTimeMachineが遅くなるかも #solved
- Dockerやって知ったmoshの残念な点
- JavaScriptをDockerを使って黒い画面に表示する
- Dockerで音を鳴らす
- DockerでIPython Notebookを動かして、数え上げおねえさんを救う
- EC-CUBEをh2oと連携させてdocker for macで動かしてosxfsが大変遅いことを体感した件