XmingでFreeBSD上のターミナルを開く

ネットワークがらみのプログラムを書いていると、ターミナルがたくさん欲しくなる。作業しているscreenで分割してもいいんだが、tail -F のターゲットが複数あると、シェルの切り替えがエラク面倒くさくなるので論外。やはりscreenで展開するシェルの数は、たかだか5個ぐらいにとどめておくのが無難ぽい。というわけで、別の監視用にX-Windowなターミナルを立ち上げてそちらでチェックすることにした。もう一枚PuTTYで接続して、としてもいいんだが、そうすると今度は監視するウィンドウの数だけPuTTYで接続しにいく羽目になる。

しかし、なんだかんだで結構苦戦してしまった。

まず、XmingをクライアントのPCにインストールする。このとき、XmingWindowsファイアウォールの例外に追加するかどうか問い合わせダイアログがでるが、「NO」でOK。どうせPuTTYのX-Forwardingを使うので、別のマシンからconnectできる必要はないし、セキュリティ的にマズイ。

次にPuTTYでX-Forwardingを有効にして、接続する。このとき、環境変数DISPLAYがlocalhost:10とかいう形になっていることを確認する。おそらく普通に素に入れたFreeBSDの場合、うまくいかないはず。PuTTYで一時的にログファイルをとってみると、xauthがなくて失敗していることがわかる*1

X11周りの認証ツールであるところの、xauthをportsからインストールする。さらに/etc/ssh/sshd_configのXAuthLocation をxauthを正しい場所に入れ替えてあげる必要がある*2sshdをリブートして、X11Forwardingを有効にしてあるPuTTYでつないで、DISPLAYが正しいことを確認する。

なお、このときFreeBSDマシン側のファイアウォールの設定に注意する必要がある。X11Fowardingにおいては、sshを受けた側のループバックネットワークデバイス経由で接続するわけで、これがrejectされてはまずい。で、FreeBSDではipv6が有効になっている場合、どうもipv6を優先でつなごうとする。なので、ipv6でつながる必要がある*3ipfwの場合だと、「ipfw pass ... via lo0」があればOK。

これで一通り設定完了。監視するべきプロセス2つ、tail -Fの結果を3つほど監視しつつ、GNU screenでシェルを切り替えつつ作業している*4が、これは結構快適。

*1:ログレベルを上げすぎないようにして、できたログファイルはきっちり消すこと

*2:デフォルトは、/usr/X11R6/bin/xauthなので、これはおそらく古いパス

*3:telnet localhost 22とかすると、Trying ::1...
Connected to localhost.と出るし、netstatでもやはり、::1同士でつながっているし、::1でもLISTENしている

*4:一つがエディタ、もう一つは動作確認用