通常のサイトでは idl や idlde コマンドでIDLを起動できるように、システム管理者により環境変数/エイリアス/シンボリックリンクが適切に設定されているか、設定手段(Modulesソフトウェアパッケージなど)が提供されているはず。
そうでない場合には、次のようにして IDL の起動に必要な環境変数やエイリアスを設定できる(インストールパスは環境やバージョンにより異なる)。
# csh/tcshの場合
source /usr/local/harris/idl/bin/idl_setup
# bashの場合
. /usr/local/harris/idl/bin/idl_setup.bash
# kshの場合
. /usr/local/harris/idl/bin/idl_setup.ksh
重要な環境変数として、IDLのインストールパスを示す IDL_DIR
がある (デフォルトは /usr/local/harris/idl87
など)。idl や idlde コマンドでは IDL_DIR
が指すパスに置かれたIDLが起動する。通常は自動設定されるか、システム管理者が適切に設定してくれているはずだが、正しく設定されていない場合には手動で設定するか、上記のidl_setup
を用いて設定する必要がある。
IDLの設定を変更する方法 (優先順):
さらにIDL_STARTUP 設定でプログラム(バッチファイル)を指定することで、IDL開始時に任意のプログラムを実行させることもできる。
現在適用されている設定一覧を確認するには、IDL上で
HELP, /PREFERENCE
とする。
2列目の項目が、当該設定がどこで設定されているかを示す。CMDLINE: コマンドライン引数, ENV: 環境変数, USERFILE: ユーザー設定ファイル, DISTFILE: ディストリビューション設定ファイル, DEFAULT: IDLのデフォルト (優先順)
また設定ファイル(コマンドライン[指定された場合のみ]、ディストリビューション、ユーザー)のパスが表示される。
次のようにして設定項目の説明、設定変更が反映されるタイミング、デフォルト値を確認できる。
HELP, /PREFERENCE, /FULL
ある設定項目の現在の値を取得するにはIDL上で次のようにする。
PRINT, PREF_GET('IDL_CPU_TPOOL_NTHREADS')
ある設定項目を環境変数を用いて変更するにはIDL開始前に次のようにする。
# csh の場合
setenv IDL_CPU_TPOOL_NTHREADS 4
# bash の場合
export IDL_CPU_TPOOL_NTHREADS=4
ある設定項目をIDLで変更するには次のようにする。
PREF_SET, 'IDL_CPU_TPOOL_NTHREADS', 4, /COMMIT
/COMMIT
をつけると変更が即時に反映され、ユーザー設定ファイルにも書き込まれる。つけない場合には、変更は保留され、PREF_COMMIT
を実行することで初めて反映される。ただし、IDL_STARTUP など、IDLを再起動するか、.reset_session を実行しないと反映されない設定もある。
ある設定項目をデフォルトの値に戻すにはIDL上で次のようにする。
PREF_SET, 'IDL_CPU_TPOOL_NTHREADS', /DEFAULT, /COMMIT
設定の確認・変更は、統合開発環境(idlde)でWindow→Preferences (日本語ではウィンドウ→設定)でGUIでも行うことができる。設定変更の結果はユーザー設定ファイルに書き込まれる。
設定名と値をコロンで区切ったテキストファイル。
IDL_STARTUP : ~/.idl_startup
IDL_CPU_TPOOL_NTHREADS : 4
IDL_GR_X_RETAIN : 2
ディストリビューション設定ファイルにはシステム全体の、ユーザー設定ファイルにはユーザーごとの設定を記述する。設定ファイルの場所はHELP, /PREFERENCE
で確認する。ユーザー設定ファイルはPREF_SET
や統合開発環境(idlde)の設定画面を用いることでも変更することができる。
IDL起動時にコマンドライン引数で任意の設定ファイルを指定し、一時的に設定を変更することも可能。
ユーザー設定ファイルとディストリビューション設定ファイルはIDLのバージョンによって異なるファイルとなる。IDLのバージョンアップのことを考えると、環境変数かコマンドライン設定ファイルを用いるほうが無難かもしれない。
IDL開始時に自動的に実行するプログラムファイル(IDLバッチファイル)を指定する。ウィンドウ、グラフィックス、フォント、カレントディレクトリなどの初期設定などを行うのに便利。
例: ~/.idl_startup という名前で、バッチファイルを作成する。
DEVICE, DECOMPOSED=1, RETAIN=2, TRUE_COLOR=24
次のようにして、IDL開始時に~/.idl_startup を自動的に実行するようにする。
# IDL開始前に csh で環境変数を設定する場合
setenv IDL_STARTUP ~/.idl_startup
# IDL開始前に bash で環境変数を設定する場合
export IDL_STARTUP=~/.idl_startup
# IDL上で設定する場合 (ユーザー設定ファイルに保存され、次回起動時か、.reset_session で有効になる)
PREF_SET, 'IDL_STARTUP', '~/.idl_startup', /COMMIT
# (参考) バッチファイルなのでIDLに直接渡して実行させることもできる
idl ~/.idl_startup
IDL 8.5以前で IDL_IDLBridge
で子プロセスを開始する際には、IDL_STARTUP で指定されたプログラムは自動実行されない。必要な場合、子プロセスを立ち上げた後、明示的に実行する必要がある。
obj = obj_new('IDL_IDLBridge')
obj->Execute, '@' + PREF_GET('IDL_STARTUP')
IDL 8.6以降では子プロセスを開始する際に IDL_STARTUP で指定されたプログラムが自動実行されるため、この操作は不要。
IDLのプログラムを検索するパスを指定する。IDL_PATH で指定されたパスにあるプログラムは、フルパスを指定して手動コンパイルする必要はなく、自動コンパイル・実行できるようになる。
複数のパスはコロン(Windowsではセミコロン)で区切る。また、パスの前に + をつけると、サブディレクトリの中も検索対象になる。
# IDL開始前に csh で環境変数を設定する場合
setenv IDL_PATH '<IDL_DEFAULT>':+$HOME/lib
# IDL開始前に bash で環境変数を設定する場合
export IDL_PATH='<IDL_DEFAULT>':+$HOME/lib
# IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される。!PATHシステム変数もリセットされる)
PREF_SET, 'IDL_PATH', '<IDL_DEFAULT>:+$HOME/lib', /COMMIT
既に IDL_PATH が設定済みの場合には、既存の IDL_PATH の内容を保持したままに追加するようにする。
# IDL開始前に csh で環境変数に追加設定する場合
setenv IDL_PATH '<IDL_DEFAULT>':+$HOME/lib:$IDL_PATH
# IDL開始前に bash で環境変数に追加設定する場合
export IDL_PATH='<IDL_DEFAULT>':+$HOME/lib:$IDL_PATH
# IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される。!PATHシステム変数もリセットされる)
PREF_SET, 'IDL_PATH', '<IDL_DEFAULT>:+$HOME/lib:' + PREF_GET('IDL_PATH'), /COMMIT
毎回同じ設定を使う場合には、シェルの設定ファイル (~/.cshrc や ~/.bashrc) に書いておくか、PREF_SET
でユーザー設定ファイルに設定を保存しておく。
IDL標準のライブラリを使うため、<IDL_DEFAULT> を含めるようにする。/usr/local/rsi/idl/lib や /usr/local/itt/idl/lib のようなIDLのインストールパスを直接指定してしまうと、IDL本体とライブラリでバージョン不一致が発生するなどのトラブルの原因になる。
IDL_PATH 設定が展開された結果は、!PATH
システム変数で確認・変更できる。(!path = expand_path(pref_get('IDL_PATH'))
と等価)
IDL実行中に一時的にパスを変更する場合には、!PATH
システム変数の値を直接書き替える。
コマンドラインの履歴バッファの保持数を変更する。
# IDL開始前に csh で環境変数を設定する場合
setenv IDL_RBUF_SIZE 1000
# IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される)
PREF_SET, 'IDL_RBUF_SIZE', 1000, /COMMIT
配列演算などのマルチスレッド動作で用いる最大スレッド数を設定する。
# IDL開始前に csh で環境変数を設定する場合
setenv IDL_CPU_TPOOL_NTHREADS 4
# IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される)
PREF_SET,IDL_CPU_TPOOL_NTHREADS, 4, /COMMIT
指定しない場合にはシステムの全論理コアを使用する。Hyper-Threading が有効な環境では、スレッド数を物理コア数に抑えるほうが速くなる場合がある。また、CPU・メモリが複数ノードに分かれている環境(NUMA)や、システムのコア数が非常に多い場合、複数のIDLプロセスを同時に走らせる場合などにも調整するとパフォーマンスが改善される場合がある。
複数のマシンでホームディレクトリを共有している場合等で、IDL_CPU_TPOOL_NTHREADS を 1ノードあたりの物理コア数に自動設定する例:
# csh の場合
if ( -x /usr/bin/lscpu ) then
set num_cores=`/usr/bin/lscpu -p=CORE,NODE | grep ',0$' | sort -u | wc -l`
if ($num_cores > 0) then
setenv IDL_CPU_TPOOL_NTHREADS $num_cores
endif
unset num_cores
endif
# bash の場合
if [ -x /usr/bin/lscpu ]; then
num_cores=`/usr/bin/lscpu -p=CORE,NODE | grep ',0$' | sort -u | wc -l`
if [ "$num_cores" -gt 0 ]; then
IDL_CPU_TPOOL_NTHREADS=$num_cores
export IDL_CPU_TPOOL_NTHREADS
fi
unset num_cores
fi
ダイレクトグラフィックスのウィンドウの再描画の方法を指定する。0: 再描画しない, 1: Xサーバーで管理, 2: IDLで管理。TVRD
がうまく動かない場合や、ウィンドウが背面に隠れると描画されたグラフィックスが消えてしまう場合には、2 に変更する。IDL起動後にDEVICE
やWINDOW
プロシージャのRETAIN
キーワードでも個別に指定できる。Windows では IDL_GR_WIN_RETAIN
。
Xvnc (vncserver) 上でLinux版IDLを利用していて、グラフィックス出力時にXvncが頻繁にクラッシュ(Segmentation Fault)する場合には、Xvnc (vncserver) の起動時に -bs
オプションをつけるか、IDL_GR_X_RETAIN
を0か2に設定すると改善する場合がある。
オブジェクトグラフィックスのレンダリングモードを指定する。0: ハードウェア、1: ソフトウェア。リモートログインで使う場合やWaylandを利用する場合など、ハードウェアレンダリングで不具合が生じる場合には 1 に変更する。一方、IDL 8.7.1 以前ではソフトウェアレンダリングモードで不具合が生じる。WindowsではIDL_GR_WIN_RENDERER
。