更新

UxUのリモート接続を本当にリモートで使うためのいくつかの方法

UxUのリモート接続テスト機能はとても便利なのだが、接続元のホストがローカルしか許されないのが難点である。例えば手元のWindowsマシンからSSH接続で開発サーバに接続している場合、テストをコンソールで行おうとすると、Firefox自体も開発サーバーで起動させる必要がある。しかし、SSH経由でコンソールにだけ接続していると、これが意外とめんどくさい。今回は、この問題の解決策をいくつか考えてみた。

まずはWindows上でX-Windowのサーバを起動する方法。Cygwinなりなんなりで手元のマシンでXを起動し、SSHで繋ぐときにX11転送を有効にしておく。シェル上でScreenを起動してる場合は、内部プロセスには環境変数DISPLAYが引き継がれないので、コマンドラインの生活には影響が出ない。screen無しだと、たとえばEmacsは-nwを付けて起動しないとX経由でウィンドウが描写されてしまう(もちろん、DISPLAYを上書きすればいいのだが)。PuttyでX11転送を有効にするならば、設定のConnection→SSH→X1で設定できる。DISPLAYの値localhost:10.0など)をScreen無しで確認しておき(それかnetstatで空いてるポートを元に推測する)、Firefoxを起動するときに--displayに渡せば、Firefoxが手元のマシンに描写される。あとはifxなりで接続してデバッグしよう。

2つめはVNCを使う方法。これは説明するまでもないし楽だが、普段開発サーバーでXを立ち上げてない場合は、あるいは逆に面倒かも知れない。また、接続するときはセキュリティに気をつける必要がある。デスクトップ全体を表示するのは若干大げさではある。

3つめはSSHのポートフォワーディングを使う方法だ。SSHで接続する際に、リモートの適当なポート(4444が楽だが)を手元の4444にフォワードしておく。そしてFirefox時代は手元のWindowsマシンで起動する。Puttyなら設定のConnection→SSH→Tunnelsで設定できる。ポートは適当に選んで、Destinationをlocalhost:4444のRemoteにしておこう。フォワードの設定が出来たら、ifxやTelnetでUxUに接続す時にlocalhostの設定した適当なポートに接続すれば繋がるはずである。

なお、SSHによるポートフォワーディングを行う際は、fire-test-runnerがそのままでは使用できない。fire-test-runnerに渡されるテストファイルのパスは開発機上におけるものであるが、手元のマシンにおいてはそもそもテストファイルを読むことが出来ないからだ。開発機のファイルをSambaなどで共有し、そのファイルが読み込まれるようにする必要があるだろう。