VNC on SSH with TTSSH

研究室の Linux を自宅の Windows から操る方法
2001/06/11 初版
2004/10/03 修正

検索エンジンから飛んできた人へ

このサイトには似たようなドキュメントが2つあります。

VNC on SSH with
PortForwarder
VNC on SSH with
TTSSH
VNC Server
(研究室側)の OS
Windows Linux
VNC Viewer
(自宅側)の OS
Windows Windows
SSH クライアント
(ポート転送用)
PortForwarder Tera Term Pro
+ TTSSH
説明の難易度 ★★
(ライトユーザー向け)
★★★
(中級者向け)

方針

VNC を使って GUI でリモート操作します。 VNC そのものについての解説は 日本語だとこのへんが詳しいです。

インターネット経由となると研究室のファイヤウォールを突破しなければならないので、 SSH の Port Forwarding 機能を使って VNC の通信を SSH に乗せてやります。要するにこのページに書いてある通りのことをします。


(図:そのページから無断引用)

この図で言うと Alice が自宅の Windows マシン、 Bob がファイヤウォール 、 Carlie が研究室の Linux マシンにあたります。 Alice 上で SSH を起動し Port Forwarding を行うのが今回のポイントです。

用意するもの

研究室マシンの準備

Linux へのインストールと設定についてはこのページが詳しいです。以下、要点を抜粋します。

まず、解凍して出てきたものを全部 /usr/local/bin/ に(パスが通っていればどこでもいいですが)コピーします。

$ su
Password:
# tar -xzf vnc-3.3.3r2_x86_linux_2.0.tgz
# cp -R vnc_x86_linux_2.0/ /usr/local/bin/
# exit
exit

必要なら /usr/local/bin/vncserver (実は Perl スクリプト)を編集して解像度やパスの設定をします。

次に、ふだん使うユーザーになって vncserver を起動し、パスワードを入力します(初回のみ)。

$ vncserver

You will require a password to access your desktops.

Passwd:
Verify:

New 'X' desktop is charlie:1

Creating default startup script /home/ikki/.vnc/xstartup
Starting applications specified in /home/ikki/.vnc/xstartup
Log file is /home/ikki/.vnc/charlie:1.log

vncserver を終了するときは、起動時に表示されたディスプレイ番号を付けて次のようにします。

$ vncserver -kill :1

これでインストールは完了ですが、このままだとウィンドウマネージャが twm だったりメニューの日本語が文字化けしたりするので、 ~/.vnc/xstartup をいじります。とりあえず次のように書き換えると普段のデスクトップ環境に近いものができました。(OS は Vine Linux 2.1、 デスクトップ環境は GNOME、 IME は ATOK X です。このへんは環境によって設定が違ってくると思います)

#!/bin/sh

xrdb $HOME/.Xresources
xset fp+ /usr/X11R6/lib/X11/fonts/japanese
xset fp rehash
setime atokx
gnome-session &

自宅マシンの準備

Tera Term Pro → Tera Term Pro 日本語版 → TTSSH → TTSSH 日本語版 の順にインストールします。
 TTSSH.exe を起動し、 [設定(S) - SSH転送(O)...] - [追加(A)...] で次のように設定します。

SSH転送の設定

ローカルのポート番号は何でもいいです。ここでは適当に 5991 としています。
 リモートのポート番号は 59xx (xx = ディスプレイ番号)になります。
 クライアントに Java を使う場合はリモートの 58xx も使うので、同時に転送するよう設定を追加します。

次に [設定(S) - SSH...] で圧縮率の設定をします。 VNC は画面上の更新された部分だけを転送してるので、データ転送の圧縮率をやたら上げてもレスポンスは大差ないようです。

SSHの設定

設定したら [設定(S) - 設定の保存(S)...] で ini ファイルに書き込んでおくとよいでしょう。

最後に VNCviewer をインストールします。これはパッケージに入ってる vncviewer.exe が単体で動くので、適当なフォルダに解凍するだけです。

使い方

  1. あらかじめ Linux マシンで vncserver を立ち上げておきます。次のようにしてディスプレイ番号を指定すれば複数起動を防げます。

    > ssh charlie
    ikki@charlie's password:
    Last login: Sun Jun 10 10:10:10 2001 from bob.titech.ac.jp
    $ vncserver :1
    
    New 'X' desktop is charlie:1
    
    Starting applications specified in /home/ikki/.vnc/xstartup
    Log file is /home/ikki/.vnc/charlie:1.log
    

  2. Port Forwarding のための TTSSH を起動します。 TTSSH.EXE /F=なんちゃら.ini で ini ファイルを指定できます。
    こいつをバックグラウンドで立ち上げっぱなしにしておきます。

  3. VNCviewer を起動します。接続先を聞かれるので、host:display の代わりに localhost:(さっき設定したローカルのポート番号) を指定します。たとえば、ここでは localhost:5991 とします。
    Windows9x 系の場合は localhost: ではなく 127.0.0.1: と書くといいらしいです。

    VNCviewer の接続先
  4. パスワードを聞かれるので、インストール時に決めた VNC 用のパスワードを入力します。ここでパスワード入力画面が出てこない場合は VNC Server との接続に失敗しています。

  5. うまくいけばこんな感じになります♪ (画面は後述のマクロを使用した場合です)

VNC とデスクトップ

PortForwarder のスヽメ (2002/9/30 追記)

VNCserver は Linux マシンで常時立ち上げっぱなしにしておくのが普通でしょう。それならいちいち TTSSH でログインする必要はなくて、代わりに PortForwarder を使った方がスマートです。 PortForwarder を使った方法は別のページで説明しています。 → VNC on SSH with PortForwarder

自動化

VNCserver を立ち上げっぱなしにしない場合、決まった手順を毎回やるのも芸がないので、リモートログインから VNCserver と VNCviewer の起動、終了、ログアウトまでを自動化するマクロを書いてみました。

; TTSSH 経由で VNC を使うマクロ VNC.ttl
; by mobitan 2001/6/10

; コマンドライン:
; C:\Program Files\TeraTerm\ttssh.exe bob.titech.ac.jp:22 /f=VNC.ini /m=VNC.ttl


VNCVIEWER = 'C:\Program Files\VNC\vncviewer.exe'	; vncviewer のパス
getpassword 'password.dat' 'charlie' PASSWORD	; パスワードファイルと識別子
DLGPOSX = 750				; ダイアログの位置
DLGPOSY = 0


; bob から charlie へログインして vncserver を起動
wait   '> '
sendln 'slogin charlie'

wait   'password: '
sendln PASSWORD

wait   '$ '
sendln 'vncserver :1'

; ローカルの vncviewer を起動
exec VNCVIEWER

showtt 0		; Tera Term のウィンドウを最小化
setdlgpos DLGPOSX DLGPOSY
yesnobox 'VNC サーバが稼働中です。'#13'終了しますか?' 'charlie:1'

; [Yes] が押されたら vncserver を終了してログアウト
if result then
	showtt 1
	sendln 'vncserver -kill :1'
	wait   '$ '
	sendln 'exit'
	wait   '> '
	sendln 'logout'
endif

このマクロは SSH の設定を済ませた(設定を保存した) ini ファイルとの併用が前提となります。コマンドライン(ショートカットのリンク先)で次のように指定すればOKです。

> TTSSH.EXE bob.titech.ac.jp:22 /F=なんちゃら.ini /M=vnc.ttl

参考文献

扉ページにまとめてあります。