XDMCPでリモート画面が出せない

新しく買ったPC(「vmserver」という名前で呼ぶが)はちょっとウルサイので机から離れたところに設置して、XDMCPVNCで静かなノートPC(Inspiron 1501)から管理することを考えている。

まず、XDCPの設定から。
XDMCPを使うにはクライアント側(X的にはサーバ側)にXサーバソフトが必要だが、InspironのFedora 7の「Terminal Server Client」を使えば、XDMCPパッケージをダウンロードするだけで、XDMCPが利用できる。

サーバ側(vmserver、X的にはクライアント側)の設定は、色々なホームページで出ていたので、設定は省くが、クライン側(X的にはサーバ側)におけるファイヤーウォールの設定でハマった。サーバ側のファイヤーウォールに関しての設定はどのページにも必ず書いてある。(177/udpを開けるというルール。)

しかし、Terminal Server Clientからアクセスできない。Xウィンドウのオリジナル画面(濃い灰色の綾波模様の画面)までは表示される。大きなバッテン印のマウスのカーソルも表示され、動いている。しかし、XDMのログイン画面が出てこない。設定が間違ったかと思い、何度も確認したが問題ない。ひょっとして、と思い、クライアント側(Xサーバ側)のファイヤーウォールを一旦無効にしてみたら、見事に使えるようになった。よく考えれば当たり前だが、クライアント側(つまりXサーバ側)ではXサーバが動いているので、このサーバに対するコネクション要求をリジェクトしていてはXサーバには何も表示されない。

というわけで、x11ポート(6000/tcp)を許可して再びファイヤーウォールを有効に。とことが、再び、Xプロトコルの通信が出来なくなった。(XDMCPの通信は出来ているので、「素」のXサーバ画面は表示されるのだが。)前提が間違っていたか? 他にも開けなければいけないポートがあるのか? ちょっと試行錯誤してから、一旦ファイヤーウォールを切って、Xプロトコルで通信できる状態でXDMのログイン画面を表示し、その状態のポートの確立状況を見るために、

# netstat -t

で調べた。何と6000番ではく6001番で接続している。ひょっとしてと思い、もう一つ、Terminal Server Clientを起動して接続すると6002番で接続している。

当たり前と言えば当り前だった。6000番は最初のXサーバ(通常はローカルなXサーバ)と接続するためにポートで複数のXサーバと接続するためにはそれぞれ別のポートにパケットを投げる必要がある。Xサーバのホストが違えばまだしも、上の実験のように一つのマシンで複数のXサーバを立上げ、それぞれ別にXクライアント(つまりアプリケーション・サーバ)へ接続する場合はポート番号を変えるのが一番簡単な実装方法だ。(ポート番号を同じにして、一つのサーバで別々のセッションを分ける実装もあるかと思うが、X11が定義された1980年代では、同じマシンで複数のXサーバを表示することは想定できなかっただろう。)

ということで6001番を開ければ、ファイヤーウォールを設定しても、無事にXDMCPでリモート操作できるようになった。
当面は1つのXサーバで管理できればいいので、ポートは6001だけで済む。(もし、複数のXサーバからリモート管理するのであれば6002、6003、…と開けておく必要があるが。)