トップページ>>>「いろいろ」目次

VNCの使い方

初版作成:2003/09/07

目次

  1. 前書き
  2. 本題
  3. 後書き或いは感想

前書き

 お仕事の関係で、どうしても外部サーバーに X Windows でもってリモートログインする必要ができてしまったわけです。
 んで、sshでは接続できるのでどうにかしてVNCを入れなければ非常にピンチな状態だったわけです。
 というわけで、VNC(Virtual Network Computing) を導入してみました。
目次に戻る

本題

  1. VNC の入手先
  2. VNC の使い方(vncserver, vncviewer)
  3. VNC の使い方(vncconnect)

VNC の入手先
「本題」に戻る

 Xだけでも、Xプロトコル(というのかな?)を使ってリモートのXプログラムをローカルで実行できたりする機能があります。
 が、はっきり言って今回は調べるのが面倒だったので。それは使いませんでした。

 VNCの場合、「RFBプロトコル」という、「Remote FrameBuffer」とかいう仕組みを使ったプロトコルを利用しているそうです。
 ようするに、Xをそのまま使うのではなく、RFBプロトコルでいろいろと使いやすくしてから利用しよう、という二段構えのシステム?みたいな。
 んで、RFBプロトコルはオープンなので、Linux/Unix/Windows版とマルチに使えるそうです。んで、サーバープログラム・クライアントプログラムともにフロッピーディスク1枚に収まる程軽い。というわけで、Windows←→Linux/Unix が非常に簡単にできる仕組みだそうです。

 とにかくVNCを入手しなければ始まりません。元々はAT&Tで開発されているようで、現在では http://www.realvnc.com/  から入手できます。

 DownloadページからLinux x86版のtarボールを入手し、展開します。今回入手したのは vnc-3.3.7-x86_linux.tar.gz でわずか 747KB程度。軽い。
 んで、いつも通り「tar zxvf」あたりで解凍しますと・・・

-r--r--r--    1 fenjin   fenjin      18000  5月 11日  2002 LICENCE.TXT
-r--r--r--    1 fenjin   fenjin       8829  2月  7日  2003 README
-r-xr-xr-x    1 fenjin   fenjin    1387941  3月  1日  2003 Xvnc*
-r--r--r--    1 fenjin   fenjin       6548  3月  1日  2003 Xvnc.man
drwxr-xr-x    2 fenjin   fenjin       4096  3月  1日  2003 classes/
-r-xr-xr-x    1 fenjin   fenjin      13849  3月  1日  2003 vncconnect*
-r--r--r--    1 fenjin   fenjin       2223  3月  1日  2003 vncconnect.man
-r-xr-xr-x    1 fenjin   fenjin       1991  9月 20日  2002 vncinstall*
-r-xr-xr-x    1 fenjin   fenjin      19835 11月  2日  2002 vncpasswd*
-r--r--r--    1 fenjin   fenjin       1537  8月 15日  2002 vncpasswd.man
-r-xr-xr-x    1 fenjin   fenjin      13819 10月 30日  2002 vncserver*
-r--r--r--    1 fenjin   fenjin       4237  9月 23日  2002 vncserver.man
-r-xr-xr-x    1 fenjin   fenjin     144329  3月  1日  2003 vncviewer*
-r--r--r--    1 fenjin   fenjin      14590  9月 20日  2002 vncviewer.man
 というように、すでにバイナリ形式のプログラムが入っていました。

 あとは「README」ファイルの通りにインストールします。つまり、
# ./vncinstall /usr/local/bin /usr/local/man
 すればおしまいです。

VNC の使い方(vncserver, vncviewer)
「本題」に戻る

 VNCを使ってログインしたいサーバーを「VNCサーバー」と呼ぶことにします。
 VNCを使うクライアントマシンを「VNCクライアント」と呼ぶことにします。

 最初にVNCサーバー側でVNCのサーバープログラムを起動する必要があります。このサーバープログラムの本体ファイルは「Xvnc」です。しかし、これを制御するためのPerlスクリプトが「vncserver」という名前で提供されており、こちらを適切なオプションを与えて実行することにより、VNCサーバープログラムを制御することができます。
 READMEにも書いてありますが、通常は vncserver にオプションは必要ありません。

 というわけで、まあ何はともあれ動かしてみましょう。VNC関連のプログラムは(vncinstallを除いて)基本的にすべて一般ユーザーでも実行できます。
 まずはVNCサーバー側でサーバープロセス制御スクリプトである「vncserver」を実行します。

$ vncserver 

You will require a password to access your desktops.
Password: (パスワードを入力します。表示されません。) Verify: (確認のためもう一度入力します。表示されません。)
New 'X' desktop is seisyuu:1
Creating default startup script /home/fenjin/.vnc/xstartup Starting applications specified in /home/fenjin/.vnc/xstartup Log file is /home/fenjin/.vnc/seisyuu:1.log
 初めてvncserverを起動したときのみ、パスワードを要求します。
 「New 'X' desktop is seisyuu:1」に注目してください。コロンに続く整数値が、VNCサーバープロセスが利用するディスプレイ番号です。VNCクライアントからはVNCサーバーホスト名と、このディスプレイ番号を指定することにより接続することができます。
 ちょっと試しに・・・
$ ps ux
...
fenjin    1707  0.1  0.6  8108 6452 ttyp0    S    17:06   0:00 Xvnc :1 -desktop X -auth /home/fenjin/.Xauthority ...
...
 このように、VNCサーバープログラム本体である「Xvnc」が適当なオプションでもって起動していることがわかります。

 サーバープロセスの確認ができれば、次はクライアントです。「vncviewer」を実行します。
$ vncviewer --help
...
usage: vncviewer [<options>] <host>:<display#>
       vncviewer [<options>] -listen [<display#>]
 だそうです。気になるのが「-listen」オプションですが、とりあえずこれは置いておきます。
 結局、
$ vncviewer hoge.hoge.com:1
 みたく「ホスト名:VNCサーバー側のディスプレイ番号」みたいなオプションを指示すればどうにかなりそうです。
 今回はローカル上でサーバーを起動してみましたので、そのまま・・・
$ vncviewer localhost:1
VNC viewer version 3.3.7 - built Feb 28 2003 18:25:22
Copyright (C) 2002-2003 RealVNC Ltd.
Copyright (C) 1994-2000 AT&T Laboratories Cambridge.
See http://www.realvnc.com for information on VNC.
VNC server supports protocol version 3.3 (viewer 3.3)
Password: 
VNC authentication succeeded
Desktop name "fenjin's X desktop (seisyuu:1)"
Connected to VNC server, using protocol version 3.3
...
 といった具合です。Password: のところには初めてvncserverを起動したときに入力したパスワードを打ち込みます。
 認証に成功すれば、デフォルトではtwm+xtermの味気ない画面が表示されます。


 終了するにはクライアント側のウインドウを強制終了すればとりあえず終了できます。

 一通り作業が終われば VNCサーバー側のプロセスも終了しておきましょう。中でどうなっているのかはわかりませんが、SSH越しというわけでもないのでいつまでもポートをあけておくのは不安です。
 VNCサーバープロセスを終了するには、vncserverを「-kill :ディスプレイ番号」というオプションをつけて実行します。
$ vncserver -kill :1
Killing Xvnc process ID 1707
 「-kill」とコロンの間にスペース一個入ることに注意してください。
 この後念のため ps ux してみて、Xvncプロセスが消滅していれば、VNCサーバーは正常に終了しました。

 基本的な使い方は以上です。

VNC の使い方(vncconnect)
「本題」に戻る

 最後に「vncconnect」コマンドの使い方を説明します。
 これはちょっと特殊なコマンドで、「サーバー側から」クライアントの vncviewer を叩くためのコマンドです。

 試してみます。まずはVNCサーバー側で vncserver を実行します。

$ vncserver 

New 'X' desktop is seisyuu:1
Starting applications specified in /home/fenjin/.vnc/xstartup Log file is /home/fenjin/.vnc/seisyuu:1.log
 続いてVNCクライアント側で、先ほど無視した「-listen」オプションをつけて vncviewer を実行します。
$ vncviewer -listen
...
vncviewer -listen: Listening on port 5500 (flash port 5400)
vncviewer -listen: Command line errors are not reported until a connection comes in.
 ここまでで一旦、vncviewerの出力するメッセージは停止します。この状態はいわゆる待機状態といえる状態です。
 というわけで、VNCサーバー側からVNCクライアントを呼び起こすわけです。

 VNCサーバー側で、vncconnect コマンドを実行します。オプションは「-display :ディスプレイ番号 ホスト名:待ち受けポート番号」の順番です。
 この場合なら VNCサーバーではディスプレイ番号1番、VNCクライアント側ではvncviewerの表示メッセージに基づき、待ち受けポート番号は5500番となります。
$ vncconnect -display :1 127.0.0.1:5500
 こうすると、クライアント側でウインドウが開き、VNCの画面が表示されます。
 サーバー側から呼び出しているのでパスワードは要求されません。

 vncconnectコマンドの基本的な使い方は、まあこんな感じだと思います。

目次に戻る

後書き或いは感想

 サーバーの設定だけならSSHで全然問題ないんですよ。CUIベースでどうにかなりますから。ところが、今回はブロードバンド・ルータ(BB)の設定を変更する必要があったんです。使ったことのある人ならご存じの通り、BBの設定変更は基本的にWebブラウザから行います。んで、外部から不正に変更されないよう、外部ネットワークからは設定変更のWebページを表示できないような設定になっています(というかするし、デフォルト)。
 というわけで、今回はどうしても X を利用したリモートアクセスを行い、LAN内部からBBの設定変更Webページを呼び出す必要があったわけです。

 まあ、X が利用できるだけで御の字ですが。できればもうちょっと勉強して、twmとかじゃなくてもっと気の利いたWMを使いたいところですね。まあ必要になれば勉強することでしょう。
 というわけで今回はこの辺で失礼します。
目次に戻る

トップページ>>>「いろいろ」目次