# # 表題 仮想 X サーバを用いての dcl 描画のダンプ # # 履歴 2004/05/18 山田 由貴子 # ○ 概要 ここでは, Debian 環境において, 仮想 X サーバ Xvfb を用いて dcl で描 画する絵のダンプを行なう手順を示す. 大量のダンプ処理中はその計算機 において他のコンソール作業が出来なくなる. 仮想 X サーバへダンプする 絵を飛ばすことでこの問題が解決できる. この覚え書きは以下で構成される: * 参考資料 * 作業を行なった環境 * 描画実行 (仮想 X サーバの立ち上げと, X サーバの認証) * DCL の設定例 * xwd 形式から gif 形式への変換 ○ 参考資料 gtool を用いたアニメーション作成のための手引 http://www.gfd-dennou.org/arch/gtool/TEBIKI.gt3-dcl5.animation DCL: 内部変数管理ルーチン http://www.gfd-dennou.org/arch/dcl/dcl-f77doc/rc1/index_menu.html ○ 作業を行なった環境 ・Debian 3.0/woody ・X11R6 ・dcl と描画ツール (1,2 両方の動作を確認している) 1. dcl-c (5.2), ruby (1.8.1), gphys (0.2.2) gphys-0.2.2 が動作するために必要なパッケージ narray-0.5.7p2, ruby-dcl-1.2.2, misc-0.0.3, ruby-netcdf-0.5.2, 等 2. dcl-ffc4 (5.2-7), gt3-dcl5-ffc (20000124-4) ・netpbm (9.20-8.2) ・bash (2.05a-11) ・xvfb (4.1.0-16woody1) ○ 描画実行 (仮想 X サーバの立ち上げと, X サーバの認証) 描画実行は, X サーバの認証と仮想 X サーバの起動後に行なう. この方 法には 2 つある. 数の少ないダンプ処理を行ないたい場合は以下の 1. の 方法を, 多くのダンプ処理を行ないたい場合や, 1. の方法がうまくいかな かった場合は以下の 2. の方法を勧める. 1. xvfb-run の使用 xvfb をインストールすると xvfb-run というスクリプトも同時にイン ストールされるので, これを使って描画すると簡単便利である. ただし, 動作が多少遅い, 実行環境 (計算機のスペック) によってはう まく動作しない場合がある, という欠点がある. 1-1. 解像度, 色深度の設定を変更する. /usr/local/xvfb-run ===================================================================== # XAUTHORITY=./Xauthority Xvfb :99 -screen 0 640x480x8 -nolisten tcp \ XAUTHORITY=./Xauthority Xvfb :99 -screen 0 1024x768x24 -nolisten tcp \ ===================================================================== 1-2. 実行 (実行例は以下の「DCL の設定例」を参照) $ 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 [ダンプの設定をしたプログラム] TEBIKI 作成者の覚書: 2-1. Xサーバ認証が xhost を使うとなぜかうまくいかないので, Xサーバへの表示許可を xauth で出している. 2-2. xauth add :99 の許可を書き込んだ ~/.Xauthority を作成して おいて, ~/.bashrc に export XAUTHORITY=/home/usr/.Xauthority, export DISPLAY=:99 と書き込んでおけば, 実行は, 以下の 2 行 だけでいいかもしれない (試してないけど). $ Xvfb :99 -screen 0 1024x768x24 -nolisten tcp > /dev/null 2>&1 & $ ./[ダンプの設定をしたプログラム] ○ 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 というメソッド (サブルーチン) を用 いる. * 'LDUMP' ダンプを行なうので true に設定 * 'LWAIT', 'LWAIT1' 改ページ, 画面クローズ時に一時停止しないように false に設定. これを指定しないと, マウスあるいは Enter によ るページ送りをしようとして入力待ちが続く. * 'IPOSX', 'IPOSY' ウィンドウの位置の始点の設定. 50 前後とする. これを設 定しないと仮想コンソールでマウスによる位置指定をしよ うとして入力待ちが続く. * DCL::gropn(1) X 端末に描画ウィンドウを開く ○ 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