仮想 X サーバを用いての dcl 描画のダンプ


○ 概要

ここでは, Debian 環境において, 仮想 X サーバ Xvfb を用いて dcl で描画する絵のダンプを行なう手順を示す. 大量のダンプ処理中はその計算機において他のコンソール作業が出来なくなる. 仮想 X サーバへダンプする絵を飛ばすことでこの問題が解決できる.

この覚え書きは以下で構成される:


○ 参考資料


○ 作業を行なった環境


○ 描画実行 (仮想 X サーバの立ち上げと, X サーバの認証)

描画実行は, X サーバの認証と仮想 X サーバの起動後に行なう. この方法には 2 つある. 数の少ないダンプ処理を行ないたい場合は以下の 1. の方法を, 多くのダンプ処理を行ないたい場合や, 1. の方法がうまくいかなかった場合は以下の 2. の方法を勧める.

1. xvfb-run の使用

xvfb をインストールすると xvfb-run というスクリプトも同時にインストールされるので, これを使って描画すると簡単便利である. ただし, 動作が多少遅い, 実行環境 (計算機のスペック) によってはうまく動作しない場合がある, という欠点がある.

2. 手動による X サーバ認証設定, Xvfb の起動

xauth によって Xサーバの認証設定ファイル XAUTHORITY を作成したあ と, 仮想 X サーバ Xvfb を起動する. 表示許可を出したディスプレイ に描画を行なう.

$ MCOOKIE=$(mcookie)
$ XAUTHORITY=./Xauthority xauth add :99 . $MCOOKIE > /dev/null 2>&1 
$ XAUTHORITY=./Xauthority Xvfb :99 -screen 0 1280x768x24 -nolisten tcp > /dev/null 2>&1 &
$ DISPLAY=:99 XAUTHORITY=./Xauthority [ダンプの設定をしたプログラム]

やまだ由覚書:


○ DCL の設定例

ここでは, xvfb-run を用いた場合の gt3-dcl5, ruby における仮想ダンプの設定例を示す. f77, f90 の設定は, ruby の設定と同様なので参考になるはずである.

1. gt3-dcl5 の場合

仮想ダンプに必要な最低限のオプションは以下である:

$ xvfb-run gtcont ps.sum \
  -sw:ldump=.true. -sw:iposx=50 -sw:iposy=50 \
  -sw:lwait=.false. -sw:lwait1=.false. 

2. ruby の場合

仮想ダンプに必要な内部変数の設定を描画ウィンドウをオープンする前に設定する. 実行は以下のようにする.

$ xvfb-run ruby hoge.rb

hoge.rb
================================================
DCL::swpset('LDUMP', true) 
DCL::swpset('LWAIT',false)
DCL::swpset('LWAIT1',false)  
DCL::swpset('IPOSX', 50)
DCL::swpset('IPOSY',50)  
DCL::gropn(1)

  (お絵描きメソッド)

DCL::grcls
================================================

3. f77, f90 の場合

2. に準じるサブルーチンを呼んで同様の設定をすればよい.

4. 設定するべき dcl の内部変数

仮想ダンプをする際は, マウス, キーボードの入力をせずにプログラムを終了させる必要がある. そのために必要な dcl の内部関数は以下である. 内部変数の変更は swpset というメソッド (サブルーチン) を用いる.


○ xwd 形式から gif 形式への変換

生成した xwd ファイル (dcl_???.xwd) には, 黒い枠が出来てしまっている (かもしれない). その場合, netpbm のコマンドを用いてその枠を切り取ってから, gif に変換する. 切り取り範囲は xwdtopnm で作成した pnm サイズを参考にして (dcl の設定によってはサイズが変わるので) 自分で設定のこと.

$ xwdtopnm dcl_001.xwd | pnmcut 2 2 904 654 > tmp.pnm
$ ppmtogif tmp.pnm > test1.gif

2004/06/22 更新 (by 山田 由貴子)