VNC:ゆきて帰りし仮想の世界

今、オープンソースの世界で VNC(Virtual Network Computing)がひそかに人気を集めている。コンピュータを簡単に遠隔操作できる便利なツールだ。たまたま試してみたのだが、これが結構はまってしまった。

普段UNIXスタイルの環境をお使いなら、telnetやsshといったユーティリティを利用すればシェル・レベルでリモート・マシンに接続できることはご存知だろう。Xウィンドウシステムの出力をクライアント側にリダイレクトすることもできる。しかし、デスクトップそのものをネットワーク経由で簡単に遠隔操作できることをご存知の方は少ないのではないか。

VNCはクライアント・サーバ技術を応用したものだ。サーバ・ソフトウェアが動くのはリモート・マシン側である。このソフトウェアの役割は自分のマシンのデスクトップをネットワークに送り出すことだ。一方、それを受け取るマシンの側ではクライアント・ソフトウェアが動く。VNCクライアントを使用してVNCサーバに接続すれば、リモート・マシンのデスクトップをいながらにして操作できるというわけである。VNCはAT&Tの開発したRFB (Remote Framebuffer)プロトコルで通信し、Windowsを含む複数のオペレーティング・システムに対応する。

RFBはオープンなプロトコルなので、LinuxクライアントからWindowsサーバに接続する、NetBSDからOS/2サーバを見る、VMSマシンからMacOSのデスクトップを操作するといった使い方ができる。やるべきことと言えば、目的のプラットフォームに応じて必要なクライアント・ソフトウェアとサーバ・ソフトウェアをインストールして走らせるだけである。

このプログラムはpcAnywhereやCarbonCopyといった評判のPCプログラムと似ている。クライアントからサーバのデスクトップを使用し、マウス操作、テキスト・ボックスへの入力、アイコンのクリックなどが行える。ユーザが困ったときに手助けをするサポート担当者に打って付けのツールと言えよう。これを使えば、リモートからPCの構成をチェックしたり、操作を実際にやって見せたりすることができる。また、ユーザーとサポート担当者が同じデスクトップを共有するので、双方が交互に操作しながら問題の解決に当たることもできる。

view-only(表示専用)モードでデスクトップにアクセスするオプションもある。このモードを使うとデスクトップを妨害しないで表示できるので、デモンストレーションなどで非常に重宝するだろう。複数のリモート・ユーザが同じデモを見ることもできる。

Accessing Linux from Windows ME
図1 Windows MEからLinuxにアクセスする

お楽しみはこれだけでない。クライアントとサーバの関係は交換可能なので、当然ながら特殊な用途の変種も生まれる。たとえば、LinuxやUnixライクのオペレーティング・システムの場合、1台のマシンに1つのデスクトップという制限に縛られないことを思い出してほしい。実際、現在のユーザのデスクトップを捕捉しないで自分自身のデスクトップを作成するVNCサーバがある。このタイプのVNCサーバを使えば、他のユーザとデスクトップを共有するのではなく、複数のユーザが同じマシンでそれぞれ別のデスクトップを使用して同時に作業することができる。

セキュリティはどうか?クライアントとサーバを同じLAN内で動かすのであれば心配ないが、インターネットのような潜在的に危険性をはらんだネットワーク環境で使用してもよいものだろうか? 幸い、SSHリンク経由で接続を確立することもできる。SSH(Secure Shell)を使えば、サーバのポートを開けたままにしておく必要がないので、クラッカーの攻撃を心配しなくて済む。

その上、VNCキットはたいてい非常にコンパクトだ。クライアントとサーバのキットが1枚のフロッピーに収まるので、出先で簡単にセットアップできるのもポイントが高い。

では何を選ぶか?

VNCは、本家本元のAT&TサイトかRealVNCからダウンロードできる。どちらのサイトもLinux版、Solaris版、Windows版、その他をGPLソフトウェアとして提供しており、VNCを会社で導入する場合のサポートについての説明もある。

たまたま見つけたのだが、私のMandrakeにはheXoNetのx0rfbserverとxrfbviewer(RFBプロトコルを使用するサーバとクライアント)がデフォルトでインストールされていた。サーバ・プログラムx0rfbserverは、現在のデスクトップにリモートからアクセスできるようにするもので、リモート・ユーザによるデスクトップの共有とview-onlyモードをサポートしている。プログラムを起動するだけでサーバが立ち上がり、面倒な設定は必要ない。

クライアント・プログラムxrfbviewerは、単純だが十分実用に耐えるVNCビューアだ。起動後、サーバの動いているマシンのドメイン名またはIPアドレスを入力する。そしてサーバが要求してきたらパスワードを入力すれば、すぐつながる。セッションをローカル・ファイルに記録する気の利いた機能もあり、xplayfbsプログラムで再生できる。だが、再生はどうもまだうまくいっていない。Mandrakeにまだインストールされていなかったものをいくつかインストールしてようやく記録はできるようになったが、xplayfbsで再生しようとしても画面に何も表示されない。

TightVNCのvncviewerとvncserver(後者はXvncのラッパとして動作する)も有名なパッケージだ。Linux版、Unix版、Windows版、それにJavaベースのビューアもある。本家AT&TのVNCを拡張したものなので完全互換の上に新機能もいろいろある。

使い方がheXoNetよりも特に難しいということはないが、AT&TのVNCやheXoNetにない圧縮オプションがあって、ネットワーク・リンクの品質に応じて接続をいろいろ調節できる。圧縮は高速のマシンが低速のネットワークでつながっている場合に有用だ。

heXoNetとTightVNCの大きな違いはサーバ側にある。x0rfbserverのVNCサーバではリモート・ユーザがデスクトップをコントロールするとき、ローカル画面を元のまま残しておくことができる。リモート・ユーザの操作(マウスの移動やウィンドウへの入力)はそのデスクトップのローカル・ユーザからも見えるが、実際はメモリ内に作成された新しいデスクトップで操作が行われるため、リモート・ユーザがデスクトップを完全に支配してもローカル・ユーザには影響しない。したがって、ローカル・ユーザは必要なら別の作業を行うこともできる。また、これらのデスクトップはいくつも生成できるため、複数のリモート・ユーザが同じシステムをそれぞれ独立して同時に使うことができる。

残念ながら、WinVNC(Windows版のTightVNC)では複数のデスクトップは使えない。Windowsは1台のマシンに1つのデスクトップという制限がLinuxやUNIXよりもきついからだ。

Accessing Windows ME from Linux
図2 LinuxからWindows MEにアクセスする

驚くことに、TightVNCサーバには簡易Webサーバ機能もある。WebブラウザでTightVNCサーバに接続すると自動的にJavaアプレットが送られてきて、ブラウザからリモート・デスクトップが使えるようになる。この機能はいろいろな場面で役立つだろう。

TightVNCもssh経由で簡単に接続できる。具体的にはこうすればよい。まず、xhostコマンドでクライアント・マシンのXウィンドウシステムを外部のホストに対して開く。sshでリモート・システムにログインする。クライアント・マシンをポイントするようにDISPLAY変数を設定する(自動的に設定されない場合)。リモート側でvncserverを実行してデスクトップをセットアップする。そしてリモート・マシンでvncviewerを実行すると、サーバのXウィンドウシステムの出力がローカル側に表示されるようになる。リンクの状況によっては速度があまり出ないかもしれないが、必要な処理はちゃんと行われており、vncserverは保護されている。

その他のプラットフォーム用のVNCプログラムもいろいろあり、中にはTclで書かれたものもある。私がたまたま知って気に入ったものの1つが、シャープZaurus用の fbvncserverだ。これと(圧縮用のzlib)をインストールすると、デスクトップ・マシンのLinuxからVNCセッションを実行してZaurus SL-5500に接続できる。PCのキーボードとマウスでZaurusを操作できるので時間の節約になるし、キークリック音とともにPDAがかってに動いて見えるのはグッときたりもする。

VNCの基本ソフトウェア以外に、その機能の多くを簡単に使えるようにしたフロント・エンドもある。私のMandrakeにはrfbdrakeが同梱されていた。最新バージョンのKDEに同梱されているKDE Desktop Sharingも同様のものだ。

VNCを気に入って日常的に使っている人を何人か知っているが、それが実際に動いているのを見たことがない人が案外多いのには驚かされる。コンピュータを遠隔操作する必要があるなら、この簡単で便利なツールをぜひ使ってみることをお勧めする。

Russell PavlicekはビジネスにLinuxを応用すべく活動しているコンサルタント兼ライターです。毎週webで放送される『The Linux Show』のパネリストを務めています。Linux関係の多くのWebサイトに寄稿しており、以前『InfoWorld』マガジンでオープンソースに関するコラムを担当していました。