Xvfb (X virtual framebuffer) は X Window System の仮想ディスプレイを作ることのできるソフトウェア。 これを使うと実際にスクリーンがない状態でも GUI が必要なソフトウェアを使えるようになる。
今回使う環境には CentOS7 を選んだ。
$ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ uname -r 3.10.0-327.3.1.el7.x86_64
下準備
まずは GUI を必要とするソフトウェアとして Firefox をインストールしておく。
$ sudo yum -y install firefox ipa-{,p}gothic-fonts ipa-{,p}mincho-fonts
次にランレベルを確認しておく。 単なるマルチユーザモードなので、通常であれば GUI は使えない。
$ systemctl get-default multi-user.target
もちろん、この状態で Firefox を起動しようとしてもディスプレイがないよとエラーになる。
$ firefox Error: no display specified
この状態で Firefox が使えるようになるところを目指す。
Xvfb を使う
まずは Xvfb をインストールする。
$ sudo yum -y install xorg-x11-server-Xvfb
次に Xvfb コマンドで仮想ディスプレイを作成する。 引数には仮想ディスプレイの番号として「:1」を指定する。 このコマンドは実行するとそのまま動き続ける。
$ Xvfb :1 -screen 0 1024x768x24
別のターミナルを開いて環境変数 DISPLAY に先ほど作成した仮想ディスプレイを指定する。
$ export DISPLAY=:1
この状態で Firefox を起動すると、先ほどとは異なり何やら実行されている風な出力がされている。
$ firefox Xlib: extension "RANDR" missing on display ":1". GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications. console.error: [CustomizableUI] Custom widget with id loop-button does not return a valid node console.error: [CustomizableUI] Custom widget with id loop-button does not return a valid node
次はこの仮想ディスプレイに映しだされている内容を確認することにしよう。
仮想ディスプレイの内容を確認する
xwd というツールを使うとディスプレイのスクリーンショットが撮れるのでインストールする。
$ sudo yum -y install xwd netpbm-progs
仮想ディスプレイを指定して xwd コマンドでスクリーンショットを撮る。 そのままだと xwd フォーマットという通常の画像ファイルではないので、これを png フォーマットに直して保存する。
$ xwd -display :1 -root | xwdtopnm | pnmtopng > screenshot.png
こんな感じで撮れた。
Xvfb を使えば CI 環境などでディスプレイなしにテストができそうだ。
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログを見る