Maxの日記: VNC with TIght VNC patch on Mandrake *解決*(revised)
VNC 3.3.3 r2は昨年10月にリリースされているというのに、まだCookerにもあがっていない。
r2にあげようかどうしようかと、Mandrakeなソースrpmのspecファイルを読む。
Tight VNCという、ダイアルアップ接続時のケースなどでの帯域に考慮し、効率の良い
データ転送を行うためのパッチがあたっていることが判明。
どの程度有利かはここ参照。
生のデータと比べて転送量は1/6にまで改善されている。
またssh経由での接続についても強化がされているらしい。
$ vncviewer -tunnel -encodings 'tight copyrect' remotehost:1
で接続すれば、内部的にsshを呼び出してくれるのでわざわざsshであらかじめつないで
おく必要がない。確かに便利。だが、-localhostオプションをvncserverがちゃんと
さばいてくれないと意味がない。
ポート5901で相変わらずどこからの接続も受けてしまう。そこで、モウイチドよく
考え直す
うむ....sshでセッションを張るときの指定が間違っているのだ(汗
誤)$ ssh -L 5902:host:5901 host
正)$ ssh -L 5902:localhost:5901 host
相手サーヴァの/etc/rc.d/init.d/vncserverの内容のうち、
vncserverの起動行にこれまではずしていた"-localhost"を再度追加。
上記の正しい指定で
$vncviewer localhost:2
とやるとつながった。
Tight VNCパッチであらたに追加された -tunnel オプションはどういう
形で実装されているのかチェックすると環境変数VNC_TUNNEL_CMDに指定
されている内容を展開して、sshセッションを張るようになっている。
この指定がない場合は、
/usr/bin/ssh -f -L %L:%H:%R %H sleep 20
として処理する。
%L = ローカルマシンでlistenするポート番号
%H = リモートマシン名またはIPアドレス
%R = リモートマシンでlistenするポート番号
%LはTight VNCだとvncviewerが自動的にサーチする。
よって、vncviewerを起動する前に、
$ export VNC_TUNNEL_CMD="/usr/bin/ssh -f -L %L:localhost:%R %H sleep 20
とでもしておいて、設定すればよろし。この後通常の接続が
$ vncviewer host:1
vncviewer: ConnectToTcpAddr: connect: Connection refused
Unable to connect to VNC server
と蹴られ、
$ vncviewer -tunnel -encodings 'tight copyrect' :1
が接続できればOK。とりあえず、~/.bashrcにでも先のexportを入れておく。