non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

俺が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コマンドがあるが、OSXWindowsでは結局Xサーバーが必要となってしますので、画像形式を今どきの画像形式に変換する。

OSXのHomebrewのImagemagickは--with-x11を指定する必要があった。これがないとXWDフォーマットを理解してくれない。

dockerのコンテナンにImageMagickを入れる手もあるが、無駄にコンテナサイズを増やすのも無駄なので、ホスト側のコマンドを整備した方が良い。

以下の指定で、ImageMagickを--with-x11オプション付きで再インストール出来る。

 

brew reinstall --with-x11 imagemagick

 

Link

xwd - Rekio Tech Note - Linux

関連記事

2年前の記事

1年後の記事

2年後の記事