リモートデスクトップ環境構築ソフトVNC

環境によっては本当に便利です

VNCとは

 VNCとは、"Virtual Network Computing"の頭文字をとって名づけられました。目的は、このページのタイトル通り、"リモートデスクトップ環境を構築すること"にあります。イメージ的には、Xのダム端末(死語?)やWindows Terminal Server(もしくはWindows2000 ServerのTerminal Service)などに近いものがあります。

 このソフトが優れているところは、UNIXのようにTelnet(もしくはSSH)で接続してコンソール経由で全ての操作を行うことができるOSではなく、WindowsのようにGUIを操作の前提としたOSであろうが、リモートにあるマシンをあたかも自分の目の前にあるマシンであるかのように全ての操作を行うことができるという点です。

 実際、私が管理しているサーバーは私の会社のビルの14Fにあり、居室は27Fにあります。サーバーはWindowsベースのマシンですので、管理作業を行うには基本的に14Fに行って操作する必要がありました。しかし、14FのサーバーにWindows版のVNCサーバーを、27Fの日常的に利用する端末にVNCのクライアントをインストールしたあとは、全ての管理作業を27Fから行うことができるようになりました。

 VNCは以下のURLがマスターサイトで、ダウンロードもこちらからになります。

http://www.uk.research.att.com/vnc/

 VNCはクライアント/サーバー形のソフトウェアです。VNC Serverが走っているデスクトップ環境を、VNC Clientを走らせる端末から利用することができるようになります。VNCは様々なOSに対応しており、LinuxやWindows9x/NT/2000はもとより、Solaris/Mac/DEC Alphaにも対応しています。クライアントだけですが、Windows CEにも対応しています。さらに、Javaをサポートしているブラウザを利用すれば、ブラウザをクライアントとすることもできます。しかし、VNC Clientを利用するよりもパフォーマンスが落ちるので、あくまで代替手段だとお考えください。

 

VNCのインストールと設定

 上記の通り、VNCは様々なOSに対応していますが、今回は、Linux側にVNC Serverをインストールし、同一LAN内にあるWindows端末から、VNC Clientを利用して操作を行うことができる環境の構築を目指します。

 上記のマスターサイト(もしくはそのミラーサイト)からパッケージを入手します。ソースコードも入手できますが、Linux用にコンパイルされたパッケージも置かれているので、今回はこちらを利用します。ダウンロードされたパッケージはtgz形式ですので、以下のようにして解凍/展開します。

 tar -zxvf vnc-3.3.3r2_x86_linux_2.0.tgz

 展開したディレクトリに移動して、まずは軽くREADMEに目を通します。こちらを読めばわかりますが、利用方法は非常に簡単です。READMEに従い、/usr/local/binに必要なファイルをコピーします。Turbo Linuxの場合はsu市内とコピーできませんでしたので、Permission Denyされたらsuしましょう。

 cp vncviewer vncserver vncpasswd vncconnect Xvnc /usr/local/bin

 もし/usr/local/binにパスが通っていなかったら、パスを通しておいた方がいいでしょう。.cshrc(C Shellを利用している場合)の$PATHに/usr/local/binを追加し、"source .cshrc"としましょう。Turbo Linuxの場合は、パスが通っていませんでした。パスが通っているかどうかは、"echo $PATH"と入力すればわかります。

 また、Javaをサポートしたブラウザをクライアントとして利用する場合は、JavaのClassファイルをコピーしておく必要もあります。任意のディレクトリでいいですが、READMEに従うと以下の通りになります。以下の作業はVNCのファイルを展開したディレクトリで行います。

  mkdir -p /usr/local/vnc/classes
  cp classes/* /usr/local/vnc/classes

 次に、/usr/local/bin/vncserverの編集を行います。VNCのサーバープログラムの本体はXvncですが、Xvncを起動するための起動スクリプトがvncserverです。Perlで記述されているので、その中で必要な設定を行います。

 まず1行目です。"#!/usr/bin/perl"となっている所を、実際にPerlがある場所に変更します。"which perl"で帰ってくるパスが、/usr/bin/perlでない場合は、その場所に書き換えます。

 35行目の"$geometory"は画面の解像度を決定するパラメーターですが、私は"800x600"に設定してあります。同様に"$depth"はXの色数を決定するパラメーターですが、私の環境では"8"、つまり256色以上に設定すると正しい色で描画されなかったので、仕方なく"8"にしてあります。正常に動くのならば"16"(約6万5千色)もしくは"32"(約1677万色)に設定したほうが幸せになれます。

  次に38行目の"$vncClasses"です。デフォルトでは"/usr/local/vnc/classes"に設定されています。READMEの通りに作業を行った場合は変更の必要がありませんが、別のディレクトリにJava classファイルをコピーした場合には書き換えます。

 普通に利用するのに設定を変更する必要がある部分は之くらいだと思います。設定は全てvncserverの頭にある"Glocal variables"のセクションに集められているので、 ここは一応目を通しておきましょう。

 

VNC Serverの利用

 VNC Serverを起動するには、単純に

 /usr/local/bin/vncserver :1

 と入力してやるだけです。引数の":1"はXのDisplay Numberです。他にリモートでXを利用しているユーザーがいる場合はこの限りではありませんが、家庭内LANで普通に利用している場合は"1"は空いているので、":1"を利用すればいいでしょう。

 また、初回起動時に限り、パスワードを聞かれます。これはVNC Serverに接続するためのパスワードで、接続時に必ず聞かれます。初回起動時以降に変更したい場合は、/usr/local/bin/vncpasswdを利用します。

 注意が必要なのは、VNC Serverを起動するときのユーザーが、VNCで接続したときのユーザーになるということです。つまり、VNC用の設定をデスクトップなどに行うことを想定しているのならば、専用のユーザーを作成してそのユーザーで起動した方がいいということになります。私はVNC用のユーザーを作成しました。

 VNC Serverを起動すると、起動したユーザーのホームディレクトリに".vnc"という隠しディレクトリが作成されます。その中にはVNC Serverが利用する情報が入ったファイルが作成されますが、 注目すべきファイルは"xstartup"というファイルです。これがVNC Clientから接続した際のXの環境を決定します。 デフォルトの状態でVNC Clientから接続してみればわかりますが、このままですとWindows Managerはtwmで非常にさびしいので、ここは通常利用している環境をそのままもってくることにします。

 通常、Xを利用する場合には各ユーザーの設定はそれぞれのホームディレクトリ配下に置かれる".xinitrc"というファイルで制御を行いますが、Turbo Linuxの場合はこのファイルは存在しません。どのファイルで制御しているかというと、 /usr/X11R6/lib/X11/xinit配下にある"xinitrc"がそのファイルになります。このファイルをホームディレクトリの.vncの下にコピーし、xstartupにリネームします。

 cp /usr/X11R6/lib/X11/xinit/xinitrc ~/.vnc/
 cd ~/.vnc
 mv xstartup xstartup.original
 mv xinitrc xstartup

 これでクライアントから接続すると、普通にTurbo Linux上で新しいユーザーを作成してログオンしたときと同じ環境が現れます。私はgnomeを利用しているのでKDEを利用している場合はわかりませんが、おそらく大丈夫だと思います。WindowsからVNC Clientを利用してLinuxに接続した際のイメージはこんな感じです。

 ちなみに、Java対応のブラウザから利用する場合には、以下のURLにアクセスします。

  http://(VNC Serverが動いているマシンのIP):(5800+Display Number)

 ただし、一点注意しなければならないのは、VNCは非常な便利なソフトウェアである反面、致命的なセキュリティホールになるということです。少なくともインターネットから直接利用することを考えてはいけません。VNCが利用するポート番号は、VNC Clientを利用する場合は5900+Display Number、Java Clientを利用する場合は5800+Display Numberになるので、このポートは少なくともルーター上で止めておきましょう。基本的にはローカルネットワークでの利用にとどめるべきです。