2016年7月20日水曜日

バッチ処理

 たとえば、Emacsだと、batchモードというものがあって画面を表示できないような状況でも処理を実行できる。つまりログインしてなくてもcronの時間起動で動かすことができるというわけ。ところがほかの画面を持つアプリケーションだとそうはいかない。
 画面表示でエラーになってしまう。
 これがちょいとばかり問題で、というのも時間起動で勝手に動かしておきたいのに、わざわざログインして手作業で動かさなくていけない——そのまま、放ったらかしにしておけば、いいのだが、不用心だし、猫がキーボードの上にのったりしたらおかしくなってしまう。でも画面を表示しなければ、だめなわけだからどうしようもないよなぁ、と思っていたら——。
 Xvfbというものの存在を知った。
 仮想的にXサーバを立ち上げてくれるソフトで極端な話、ノンディスプレイのハード構成でも画面を表示するアプリケーションを動かすことができる。つまりアプリの画面が仮想的なXサーバに表示されるわけだ。見えないけど。でもアプリは動く。もし表示されている内容を確認したいのなら画面ダンプをとれば、いい。

import  -display :1 -window root test.jpg

 あとは時間がきたらCtrl+qのキーボードイベントをその画面にたいして発行して終了させれば、いい——それにはxautomationが使える。1

xte -x :1 "keydown Control_L"
xte -x :1 "key q"

 これでもしかしたらFireFox2を動かして特定のhtmlをPDF出力なんてできるんじゃないか、自動で。

Footnotes:

1

:1はXvfbで立ち上げたディスプレイID

2

FreeBSDのFireFoxではPDF出力ができる