WindowsでXサーバー

Dell PowerEdge SC430 は放熱が多いんで納戸の中で運用されており、ディスプレイもないし常にリモート・アクセスしなくちゃいけない。一方、メモリーが512MBしかないのでリソースをけちるという切羽詰まった理由から、CentOS 4.3 はラン・レベル3のNFS付マルチユーザーCUIモードで常に動作させている。すると、たまに必要な X Window System を使うためにはXサーバー起動してVNCサーバー起動して、クライアントのWindows側でRealVNCを起動して……というそれなりに面倒な作業が発生するので、WindowsをリモートXサーバーにすることにした。

X Window System はUNIX/Linuxでウインドウ・システムを提供する仕組みで、クライアント・サーバー・システムとして実装しているのが特徴的だ。“手元にあるのがクライアント” と理解していると混乱するけど、“サービスを提供するのがサーバー” と理解しておけば手元のマシンがウインドウ・システムを提供するサーバーとなることがおのずと分かるだろう。というわけで、WindowsをXサーバーにすることで、UNIX/Linuxのウインドウ・システムを必要とするアプリケーションのウインドウだけをWindowsで表示することが可能になる。

Windows上にLinuxライクな環境を構築できるCygwin用の X Window System としてCygwin/Xがあるので、それを利用しよう。Cygwinのインストーラー「setup.exe」をダブルクリックし、インストール・プロセスを進め、「Select Packages」で「X11」の「Default」をクリックして「Install」に変更する。

Cygwin Setup - Select Packages

スタート メニュー「\すべてのプログラム\アクセサリ\コマンド プロンプト」をダブルクリックして コマンド プロンプト を起動し、startxwinと入力すると、xtermという X Window System を使ったターミナルが起動する。

>startxwin

xterm

xtermからXサービスを許可するクライアントを登録する。

$ # ホスト「poweredge」だけを許可
$ xhost +poweredge
poweredge being added to access control list
$
$ # すべてのホストを許可
$ xhost +
access control disabled, clients can connect from any host

ファイアウォールを利用している場合はCygwin/Xを開放しよう。コントロール パネル「Windows ファイアウォール」からタブ「例外」のボタン「プログラムの追加(R)…」を押して %CYGWIN_HOME%\usr\X11R6\bin\XWin.exe を追加する。

Windows ファイアウォール:プログラムの編集

今度はUNIX/Linux側の作業だ。今回は CentOS 4.3 を利用しているけど、ほとんどのUNIX/Linuxでは同じ仕組みとなる。DISPLAY環境変数にXサーバーのホスト名とディスプレイ番号「0.0」を設定するだけだ。

$ export DISPLAY=macbook:0.0

UNIX/Linuxからxlogoという X Window System のロゴを表示させるだけのプログラムを実行して、XロゴがWindows側に表示されたら疎通確認となる。

$ xlogo

xlogo

ここまでの作業を自動化させよう。また、このままだとJavaアプレットの日本語フォントがすべて豆腐になってしまうので、まずはその対策を行ってしまおう。

UNIX/LinuxのXFSサーバーをXサーバーとなるマシンからも使えるように、/etc/X11/fs/configno-listenをコメントアウトし、xfsを再起動する。netstatでxfsポート(7100)がリスンされていればOKだ。

$ su –
Password:
# sed -i ‘s/^.*no-listen\(.*\)$/# no-listen\1/’ /etc/X11/fs/config
# service xfs restart
xfs を再起動中:
xfs を停止中: [ OK ]
xfs を起動中: [ OK ]
# netstat -a | grep xfs
tcp 0 0 *:xfs *:* LISTEN

Windows上のCygwin/XがこのXFSサーバーを使るようにXサーバーの起動オプションを追記すれば、豆腐問題は解消される。%CYGWIN_HOME%\usr\X11R6\bin\startxwin.batXWinの引数として記述する必要がある。また、xhostもここに記述してしまえば自動化できるし、逆にxtermをコメントアウトしておけば、自動的にxtermが起動することもなくなる。

146 %RUN% XWin -multiwindow -clipboard -silent-dup-error -fp tcp/poweredge:7100
147
148 REM Startup an xterm, using bash as the shell
149
150 REM %RUN% xterm -e /usr/bin/bash -l
151 xhost +

(ボクはあまり好きじゃないけど)DISPLAY環境変数を.bashrcかなにかに書いておけば、X11を起動するだけでリモートX環境の完成だ。

<

p>Cygwin/Xを終了させるときは、タスク トレイ 内のCygwin/Xアイコンを右クリック「Exit」を選択する。

コメントを残す