このエントリーをはてなブックマークに追加

VNC のセットアップ

どんな環境?

デスクトップマシン tm-1 (w2k) とノートマシン tm-2 (LASER5 Linux6.2) が、100BaseTXのLANにつながっています。
他に、デスクトップマシン myaura (winme) やノートマシン ddn (w2k) などもありますが、これらは私のマシンではありません。

目的

tm-2 に vnc を導入し、X環境を tm-1 から使用できるようにする。

linux-box に vnc をセットアップする

私の場合、vnc-3.3.3r2 のバイナリを Download し、

# tar zxvf vnc-3.3.3r2_x86_linux_2.0.tgz
で展開後、書庫に含まれるバイナリを /usr/local/bin に転送した。
# cd vnc_x86_linux_2.0
# cp vncviewer vncserver vncpasswd vncconnect Xvnc /usr/local/bin
www-browser&java でアクセスできるように、クラスファイルを転送した。
# mkdir -p /usr/local/vnc/classes
# cp classes/* /usr/local/vnc/classes
ちなみにこれらの作業は、tm-1のtelnet(TeraTermを使用)から行った。

とりあえず接続できることを確かめる

tm-1 上のブラウザ(IE)で、tm-2 の vnc にアクセスできることを確認する。
このためにはまず、tm-2 上で vncserver が動作していなければならない。 (この煩雑さを回避・解消するために、後述する iXvnc を導入した)
telnetでtm-2にログインし、

% vncserver
を実行する。このとき、パスワードが求められるので、vnc経由での ログインに使用するパスワードを入力する。
ここで注意しなければならないのは、vncでログインしたユーザは、この vncserver を実行したユーザ名でログインする(してしまう)点である。 そのため、不用意に root で vncserver を起動してしまったりすると (パスワードがバレなければいいということは別として)セキュリティ上 好ましくない。 一般ユーザで vncserver を実行しよう。
すると、
New 'X' desktop is tm-2:1

Starting applications specified in /home/ahi/.vnc/xstartup
Log file is /home/ahi/.vnc/tm-2:1.log
というようなメッセージが表示される。ここで、

tm-2:1
というのが、vnc からログインする際のディスプレイ番号になる。 これでとりあえずtelnetはログアウトしてもよい。

次に、tm-1上で IE を起動する。
ネットワークはつながっているので、とりあえず
http://tm-2:5801/
にアクセスしてみる。ここで、:5801のうち、58はbrowser&java経由での vnc接続時の慣用的なポート番号であり、01は先ほどのディスプレイ番号である。
アクセスすると、パスワードが求められるので、先ほどのvncserver 実行時に入力したパスワードを入力する。

これで、twm あたりが起動すれば、とりあえず成功である。

終了するには?

vncviewerやブラウザを終了すると、見かけ上、処理はすべて終了したかに見えるが、 先ほどと同じディスプレイ番号とパスワードさえ入力すれば、 終了前の画面がそのままもう一度表示されることになる。 つまりX-serverは動いているのだ。
もちろんその実体は vncserver である(厳密にはこいつがXvncを起動する、はず・・・(¨;))。よって、本当にすべての処理を終了したいときは、この vncserver も終了しなければならない。
これには、次のようなコマンドをtelnet上で実行する。

# vncserver -kill :1
この際、telnetのユーザは、vncserver 実行時と同じでなければならない(別に 入ってから変更してもいいんだよ、rootみたくw)
また、このコマンドを実行すると、vnc-client は接続が切れたために 自動的に終了する(ブラウザなら灰色の画面になるかな?)

じゃあ、一連の作業って?

あなたが「vnc経由でtm-2上のXアプリケーションを使ってみたいなぁ」 なんて考えたとき、以上のような手順でvncログインしなければならない。
すなわち、次のような手順が必要となる。

  1. telnet で tm-2 上の vncserver を起動する
    (ディスプレイ番号とパスワードを覚える)
  2. tm-1上の www-browser で http://tm-2:58xx/ にアクセスする。
    パスワードを入力する。
  3. vnc 経由でいろいろ処理する。
  4. telnet で tm-2 上の vncserver を kill する。
この作業は明らかに煩雑である!

そう、理想の作業とは次のようなものだ。
  1. tm-1上の vnc-viewer で tm-2 にアクセスする。
  2. vnc 経由でいろいろ処理する。
  3. vnc-viewer を終了する。
知っての通り、これはまさしく X-Server そのものである!
動作原理は別として、X-Serverを用いるときと、全く同じ操作性が 実現できるなら、これに越したことはない。
・・・そうなのだ。VNCならそれが(フリーで)できるのだ!! (注:Windows用の実用的なX-Serverはまだまだ高価である。数万円は するんだったよね?)

iXvncの出番ですよ!

X-Serverのように vnc を使用する。
これを行うために、私はずいぶんと苦労してしまった。

歴史的には X用のvncをX端末のように使えるパッチをAndre Moreira氏が 作ったことが発端である。が、このパッチは 3.3.3r2で本体に 取り込まれてしまったため、現在ではvncをセットアップするだけで 使用できる。
ここでは便宜上『X端末のように使えるvnc』をiXvncと呼ぶことにする。
技術的には、vncサーバ(Xvnc)をinetdがアクセス要求に応じて 動的にspawnし、vncクライアントが終了すると、自動的に サーバが終了する、という処理を行うため、それらの設定を 各種ファイルに設定しなければならない。
めんどくさいので、簡単な説明を以下に述べる。

/etc/services
を書き換える。
典型的には次を追加する。
    vnc-800x600x8       5950/tcp
    vnc-800x600x32      5951/tcp
    vnc-1024x768x8      5952/tcp
    vnc-1024x768x32     5953/tcp

/etc/inetd.conf
を書き換える。
/etc/services に記述した内容に合わせて、
vnc-800x600x8	stream tcp nowait nobody /usr/local/bin/Xvnc    Xvnc -inetd -broadcast -once -geometry 800x600 -depth 8 -cc 3
vnc-800x600x32	stream tcp nowait nobody /usr/local/bin/Xvnc    Xvnc -inetd -broadcast -once -geometry 800x600 -depth 32
vnc-1024x768x8	stream tcp nowait nobody /usr/local/bin/Xvnc    Xvnc -inetd -broadcast -once -geometry 1024x768 -depth 8 -cc 3
vnc-1024x768x32	stream tcp nowait nobody /usr/local/bin/Xvnc    Xvnc -inetd -broadcast -once -geometry 1024x768 -depth 32
などと記述すればよい。

xdm を使えるようにする。
/etc/X11/xdm/Xaccess あたりを変更すればよい。(もう必要ないかな?)
#* を
*  にする。

xdm がなぜか使えなかったため、gdm を使用する。
ので、/etc/X11/gdm/gdm.conf を修正する。
[xdmcp]
Enable=1
Port=177

linux-box 自体を runlevel:5 にしなければ {xg}dm が走らない
ので、/etc/inittab を書き換える。もちろん{xg}dmも
走らせる。
...
id:5:initdefault:
...
x:5:respawn:/usr/bin/gdm

tm-2のGNOMEが安定していないので、KDE をデフォルトにする。
/etc/X11/gdm/Sessions/Default
exec /etc/X11/xdm/Xsession kde

以上をすべて行った後、tm-2を再起動する。runlevel:5にするためだ。

tm-2が再起動したら、今度は vncviewer を使って、tm-2にアクセスする。
tm-2:50
と指定すれば、800x600x8のvncサーバが自動的に起動する。と同時に gdm も起動するはずである。
この画面が出たときは、格別の幸せを感じることだろう(笑)

iXvncを入れてみて。

そう、これらすべてを行わなければならないのだ。大変である。
しかしまぁ、vncを使おうとするくらいの意気込みがあれば、 この程度の作業は苦ではないだろう。
作業自体は楽である。問題なのは『なにをすればよいか?』 がわからなかった点である。
この文章を読んで、試してみようという人は、ラッキーである。 やらねばならないことがわかっているのだから。
それにしてもdistribution毎にファイルは異なるだろうし、 不運にも gdm が入っていない場合は、xdm を使えるようにするか、 gnome を入れる必要もでてくる。ちなみに私は kdm も試したが、 gray-screen すら出てこなかった(¨;)
なにはともあれ、非常に快適である。
ブラウザから使えないという難点はあるが、これも 近い将来解決されるだろう(強制的に?httpdでポートを 開いておくという方法で解決できるらしい。暇があればやってみよう!)

有益な情報ソース

最初はvncの本を買うつもりだったが、Webを調べるだけでここまでできてしまった。 こてこてのWindowsユーザたる私でもこの程度のことはできるらしい(笑)

というわけで、非常に有益な情報をもたらせてくださった各Webサイト様を紹介させていただきます。

VNC VNCの本家ページ(英語)
Andre Moreira iXvnc patch iXvnc パッチの作者 Andre Moreira 氏の解説(英語)
VNC のページ 畠山 明さんによるVNCの解説。詳細な解説でとても役に立ちました。
簡単PC遠隔操作-VNC- 奈酢美さんによるVNC(windows to windows)の解説
簡単PC遠隔操作-VNC- Part2 奈酢美さんによるVNC(windows->linux)の解説
ここを最初に参考にしました。とってもわかりやすいです。