2.4 X Window Systemの設定(Unixのみ)
2.4 X Window Systemの設定(Unixのみ)
Webサーバ内からMathematica のフロントエンドをX上で起動する際の特殊な問題がいくつかあります.これは,通常Webサーバはtomcat のような特別なアカウントとして実行されるからです.つまり,webMathematica がフロントエンドを実行するとき,フロントエンドはそのアカウントとして実行されているのです.フロントエンドはXサーバに接続されていないと機能できません.そうするためには,Xサーバを実行している特別なアカウントが入っているWebサーバマシンのコンソールにログインするとよいのですが,このアプローチには問題もあります.まず,マシンのコンソールへのログインをオープンにしたままの状態にしなければなりません.また,フロントエンドが何かするたびにスクリーンにウィンドウが現れるので,マシンを使っている人の邪魔になる可能性があります.
Xの標準的な認証システムのもとでは,別のユーザがコンソールにログインしてXサーバを起動したら,特別なwebMathematica のアカウントから実行されているフロントエンドはこのサーバに全く接続できなくなります.このような接続が可能になるようにサーバを設定することはできますが,それでも十分ではありません.webMathematica がフロントエンドを使う度にスクリーンにウィンドウが表示されてしまうからです.この件に関しては後ろのセクション でより詳しく説明します.
これらの問題は次のセクション で説明するようにXvncのような仮想Xサーバを実行することで解決できます.仮想サーバを実行するとMathematica のフロントエンドが作るウィンドウがMathematica を実行しているコンピュータのスクリーンコンソールに表示されないようになります.
2.4.1 XvncとwebMathematica の設定
XvncとはUnix VNCサーバのことです.これはwebMathematica によって実行されているMathematica フロントエンドのようなアプリケーションが使う仮想Xサーバを提供します.また,VNCサーバも提供し,VNCビューアを接続してサーバで実行されているアプリケーションを見たりコントロールしたりできるようにします.これはフロントエンドを実行していることで起こる問題の所在を明らかにするのに役立ち便利です.
Linux,Solaris,Alphaを含む多くのプラットフォーム用のXvncがhttp://www.cl.cam.ac.uk/Research/DTG/attarchive/vnc/download.html でダウンロードできます.
Xvncのインストール
Xvncのインストールは極めて単純です.アーカイブを解凍し,必要なファイルを/usr/local/bin のようなローカルのbinディレクトリにコピーしてください.以下はその例です.
[server1]$ cp vncviewer vncserver vncpasswd vncconnect Xvnc /usr/local/bin
Xvncの起動
Xvncの起動もインストールと同じように極めて単純です.起動はwebMathematica を実行しているユーザとして,例えばtomcat として行ってください.最初に起動したときにパスワードが求められます.下記の例ではサーバはdisplay :1として起動されています.
[server1]$ su tomcat [server1]$ vncserver You will require a password to access your desktops. Password: Verify: New'X' desktop is server1:1 Creating default startup script /home/tomcat/.vnc/xstartup Starting applications specified in /home/tomcat/.vnc/xstartup Log file is /home/tomcat/.vnc/server1.wolfram.com:1.log
Xvncのテスト
起動できたら,次にMathematica のフロントエンドのようにサーバを使うアプリケーションを実行してサーバをテストしてみるとよいでしょう.以下をご覧ください.
[server1]$ su tomcat [server1]$ mathematica -display :1
もちろんこうしても実際のウィンドウはスクリーンに現れません.というのは,これが仮想サーバだからです.Mathematica フロントエンドからウィンドウが見たければ,vncviewer を実行してください.方法は次の通りです.
[server1]$ vncviewer :1
これでスクリーンにフロントエンドのウィンドウが表示されます.フロントエンドに入力して動いていることを碓認することもできます.webMathematica が動いているときならいつでもvncviewer を使ってスクリーンを見ることができます.
webMathematica の設定
最終段階としてMSP.confファイルを修正し,フロントエンドがこのサーバを使うようにします.FrontEndLaunchCommand の設定は付録の「サイト設定 」の中で説明してあります.次はdisplay :1 のXサーバに接続するサンプルの設定です.この設定はMSP.conf中にコメントとして入っています.
FrontEndLaunchCommand=mathematica -mathlink -display :1 -nogui -geometry 1000x500+10+10
これでUnixサーバでwebMathematica を実行する準備が整いました.
フロントエンドが正しく起動できないようなら,設定ファイルにサーバ名を加えるとよいかもしれません.次の例をご覧ください.myserver がwebMathematica とXvnc が実行されているマシン名です.
FrontEndLaunchCommand=mathematica -mathlink -display myserver:1 -nogui -geometry 1000x500+10+10
2.4.2 X関連のその他の問題
このセクションでは,XサーバでwebMathematica を使う際のその他の問題について説明します.上記 のようにXvncサーバを設定した場合は,このセクションは飛ばしても構いません.
Xサーバとの接続
Mathematica フロントエンドは,実行するときにXサーバと接続されていなければなりません.Xサーバがフロントエンドを実行しているユーザ以外のユーザによって実行されると,Xサーバはこの接続を拒否します.以下をご覧ください.
[root]# su tomcat bash$ mathematica Xlib:connection to ":0.0" refused by server Xlib:Client is not authorized to connect to Server xset:unable to open display ":0.0" Xlib:connection to ":0.0" refused by server Xlib:Client is not authorized to connect to Server xset:unable to open display ":0.0" Xlib:connection to ":0.0" refused by server Xlib:Client is not authorized to connect to Server xset:unable to open display ":0.0" Xlib:connection to ":0.0" refused by server Xlib:Client is not authorized to connect to Server XMathematica:can't open display:0.0, exiting... bash$
ローカルマシンからのすべての接続を許可すると,この問題を避けることができます.
[root]# xhost +localhost localhost being added to access control list [root]# su tomcat bash$ mathematica bash$
しかし,こうするとセキュリティの問題が起こりかねないので,これは余りよい方法ではありません.また,フロントエンドが実行される度にスクリーンにウィンドウが表示され,システムのユーザに迷惑がかかるという問題もあります.
このような問題を避けるためにはXvnc のような仮想Xサーバを実行するのが賢明です.
Xvfb
Xvfbは仮想フレームバッファサーバです.これについての説明はhttp://www.xfree86.org/4.3.0/Xvfb.1.html をご覧ください.これはXvncの代りに使うことができます.しかし,Xvncの方が使いやすく機能も充実しています.
Linuxの場合はhttp://www.redhat.com からRPMアーカイブがダウンロードできます.インストールしたら次のように起動してください.この際,root ととして実行する必要があるかもしれません.
su tomcat -c "/usr/X11R6/bin/Xvfb :1 -fp unix/:7100, /usr/local/Wolfram/Mathematica/4.2/SystemFiles/Fonts/Type1, /usr/local/Wolfram /Mathematica/4.2/SystemFiles/Fonts/BDF -screen 0 800x600x24 " &
このコマンドで,Xvfb がポート7100のフォントサーバを参照して起動され,Mathematica フォントを含むディレクトリが加えられます.これとは異なる場所にMathematica がインストールしてある場合はこのディレクトリを変更する必要があります.インストールによってはMathematica フォントの場所がフォントサーバの設定に加えられていることがあります.その場合はXvfb を起動するときにMathematica フォントを参照する必要はありません.Xvfbは次のように起動することができます.
su tomcat -c "/usr/X11R6/bin/Xvfb :1 -fp unix/:7100" &
この例では,Xvfbがフォントサーバとしてローカルマシンのポート 7100を使うと想定されています.フォントサーバの設定がこれとは異なる場合は,実際の設定に必要な変更を加えてください.例えば Redhat 6ではフォントサーバがローカルのunixのソケットを使うので,Xvfbは次のように起動します.
su tomcat -c "/usr/X11R6/bin/Xvfb :1 -fp unix/:-1, /usr/local/Wolfram/Mathematica/4.2/SystemFiles/Fonts/Type1, /usr/local/Wolfram /Mathematica/4.2/SystemFiles/Fonts/BDF -screen 0 800x600x24 " &
フォントサーバを実行しない場合は,フォントサーバの参照なしにXvfb を起動する必要があるでしょう.その場合は,次の「マニュアルでのフォントインストール」のセクションで説明するように,Mathematica のフォントをXのレイアウトにコピーする必要があります.
su tomcat -c "/usr/X11R6/bin/Xvfb :1 -screen 0 800x600x24 "&
仮想フレームバッファサーバを起動したら,実行されているかどうかをテストします.これはroot ととして行う必要があるでしょう.
[root]# su tomcat bash$ mathematica -display :1
もちろん,フロントエンドがこのサーバで正確に実行されていることを碓認したくても,これをスクリーン上で見ることはできません.このためエラーを示すダイアログボックスも見ることができません.フロントエンドが何を表示しているかを見る方法として,xwd とxwud を使ってダンプを調べることが考えられます.方法は次の通りです.
xwd -display :1 -root | xwud
これで,フロントエンドが表示しているものが分かります.例えば,パスワードが見付からないというメッセージを見たら,pwfile コマンドラインオプションを追加すればよいのです.
仮想フレームバッファXサーバが動いているときは,MSP.conf ファイルに修正を加えフロントエンドがこのサーバを使うようにしなければなりません.FrontEndLaunchCommand の設定は「付録」の「サイト設定」をご覧ください.以下は設定のサンプルです.
FrontEndLaunchCommand=mathematica -mathlink -display :1 -nogui -geometry 1000x500+10+10
Sun/Solarisのように,システムによってはユーザのtomcat で起動した場合に問題のあるXサーバもあります.これは/tmp/.X11 ディレクトリの許可がセキュリティ上の理由で限定されているためです.リスニングソケットが確立できないというメッセージにより,この問題が生じていることが分かります.ひとつの解決策としてディレクトリに修正を加えtomcat が書き込めるようにすることが考えられます.この問題に関してはhttp://www.faqs.org/faqs/Solaris2/FAQ/ もご参照ください.
マニュアルでのフォントインストール
Mathematica フォントにアクセスできなければフロントエンドは動きません.vncviewer あるいはxwd を使ったXサーバ の出力でフロントエンドがフォントを見付けられないというダイアログボックスを表示していることが分かったら,フォントを見付けるための更なる手段を講じなければなりません.そのための簡単かつ劇的な解決策のひとつとして,Mathematica フォントをXにコピーすることが考えられます.
cd /usr/X11R6/lib/X11/fonts cp -r 75dpi 75dpi.orig cd 75dpi cp /usr/local/mathematica/SystemFiles/Fonts/X/*.bdf . mkfontdir
しかし,これはあまりよい解決方法とはいえません.できれば避けた方がよいでしょう.というのも,Mathematica をアップデートしたときにフォントも忘れずにコピーしなければならないからです.適切な解決方法は前述したようにフォントサーバかあるいはフォントパスの設定を使うようにしてXvfb を起動することです.なお,この問題はWindowで起動している場合には起りません.