scrun
(1) で起動する場合、X サーバとクラスタ上のアプリケーションとの間に直接接続が確立されるのではなく、アプリケーションからの X Window の接続が scrun
の呼び出されたされたホストにフォワードされ、ホストと X Window サーバとの間に接続が確立されます。これにより、X サーバには scrun
の呼び出されるホストを付け加えるだけですみます。コマンドラインの例は以下のようになります:
X サーバが X Authority を用いずに動作している場合は、X サーバへの接続を許可するホスト名のリストに全てのコンピュートホストを加える必要はありません。X サーバが X Authority を用いて動作している場合には、クラスタ内のすべてのホスト、および$ xhost +server
scrun
が呼び出されたホストから $HOME/.Xauthority
もしくは $XAUTHORITY
ファイルが読み込めるようになっていなければなりません (X11 の xauth(1)
man ページも参照してください)。scrun
コマンドは Xauthority ファイルを適切に設定します。
下の図が、この動作を実現する内部メカニズムを説明しています:
scrun
(1) を用いてクラスタ上で起動した場合、scrun
は X Window アプリケーションが必要とする X Window 接続ごとにサブプロセスを fork します。サブプロセスは a.out
プロセスからディスプレイターミナルへの X Window の入出力要求のフォワーダーとして働きます。
これを動作させるためには、ディスプレイターミナル上の X サーバにサブプロセスが接続ができるようにし、X サーバが入出力をサブプロセスに渡せるようにします。上の図では、クラスタのホスト 'comp0
' 上の X クライアントからの入出力要求を扱うために、一つのサブプロセスが fork されている様子が示されています。この場合では、全ての X Window の入出力要求が一つの X クライアントによって処理され、各 a.out
プロセスは要求をこのクライアントにフォワードします。クライアントはサブプロセスとの間で要求をやりとりします。
X クライアントを表示するために実行されるコマンドの例を示します:
環境変数 DISPLAY の値は自動的に適切な値で置き換えられます。server$ xhost +server server$ scout -g pcc server$ scrun -nodes=8 ./a.out
複数の X クライアントと X サーバもサポートされています。この場合、複数のサブプロセスが X クライアントの処理のために生成されます。ユーザは X サーバへの接続を許すホストリストに scrun
が呼び出されるホストを加えるだけですみます。