流行りのVNCを入れてみた


いやぁ〜流行ってるねぇVNC。でも実際わかるよ。うん。すげぇ便利だもん。こんなのがオープン・ソースで公開されてるってんだから、まだまだ人類も捨てたもんじゃないぜ(笑)

今さらオレごときが説明などする必要もなさそうだが、一応書いておくと、VNCは、VNCサーバとVNCビューワで成り立つサーバ・クライアントという形態をしていて、大雑把にわけてVNCサーバにはUnix用、Windows用(95/98/NTね)、VNCビューワにはX用、Windows用、Mac用、Java用がある。

商用でよくある、けっこういい値段なWindows用のXサーバなどと根本的に違うのは、proprietaryなprotocolで実装されていること(公開されてるけどね)、必ずしもXとWindows間での用途に限定されないことだ。例えばWindowsの画面をMacに飛ばしてリモートで作業することもできるし、Windows同士でもちゃんと動作する。必ずしもヘテロな環境にこだわってないところがイカスよねぇ。でもって実際に、PC ANYWHEREの類なんか金輪際買う必要ねぇよ、というくらいの出来なんだから素晴しいぜ。

使い方もムチャクチャ簡単だ。オレ的には、XをWindowsに飛ばしたいとは思わないので、WindowsにVNC鯖を入れ、LinuxのX上で、vncviewerを使う、ということに限定して説明すると、まずLinux用バイナリ(vnc-3.3.2r2_x86_linux_2.0.tgz) と、Windows95用バイナリ(vnc-3.3.2r2_x86_win32.zip)をもらってくる。そしてWindows側でzipをどこか、c:\tempとかに展開すると、ちゃんとInstallShieldで仕立てたインストーラが入っているので、それでインストールする。

これでインストールは終了なので、スタート・メニューからWinVNC 3.3.2R2を起動してやり、表示されるプロパティのダイアログ・ボックスでパスワードを入力してやればWindows側の準備はおしまい。タスク・バーにVNCが納まったかな?

次に、Linux側でも持ってきたアーカイブを適当な場所に展開しよう。そのなかのvncviewerをPATHの通っているところ、~/binあたりにでもコピーしてやろう。これでLinux側もインストールそのものはおしまいだ。簡単でしょ? で、Windows側でVNC鯖が立ち上がっているのを確認したら、vncviewerを起動しよう。Win95なPCのIPアドレス(またはホスト名)の後ろに、:(コロン)で区切ってディスプレイ番号(WinVNCのプロパティで特に何も設定をいじっていなければ、通常はは0から同時セッションごとに1増える)を続けて書く。

vncviewer 192.168.9.10:0

と、こんな感じ。するとパスワードを聞かれるので、これも先ほどWinVNCで設定したパスワードを入力しよう。無事に立ち上がるとこんな風になるハズだ。

ちなみに、ブラウザにはIE4.01が入っている(大笑い) オレの環境ぢゃねぇって?わはは。確かに。でももうWindowsの環境なんぞどうなろうがオレはガンジーの無抵抗主義っつ〜か、腐ったら電気切るだけ(笑)なんで、どうでもいいのだ。無理矢理NetCenterに拉致ろうとするCommunicator 4.5だってIE4と目クソ耳クソだもんな。セキュリティのレベルが違うくらいでさぁ。

そもそもWindowsで真剣にwebをブラウズする気が失せてる(笑)し、MailもNewsもWindowsで読み書きするこたないから、MSVC++5.0のインストール時に、ビルが抱き合わせでなし崩しにIE4.0を入れたがるんで、あ〜そ〜、って放っておいたよ(大笑い)

もとい。

WinVNCのおかげで、OutlookのためだけにわざわざWindowsを起動しないでもいいのは嬉しいね。遅いのだけ我慢すれば、手近な使ってないマシンにOutlookさえ放っぽり込んでおけばいいので、今はなんだかんだでCOMPAQのノートPCに入れている。実用的には十分だよホント。だけど、日本語を使おうとするとちょっと問題があるのだった。

もともとUSで作られたソフトだから、IMEをActivateするためのキー(Alt+半角/全角とか、Alt+~とか)をちゃんとハンドリングしてくれないんだよね。つまりキー入力だけで日本語入力モードにすることができないんだ。マウスでIMEを「全角ひらがな」とかに強引にしてしまえば、日本語も入力できるんだけど、ちょっとねぇ。

それに、Alt+~を押すと、Windows側でプッて音がするんだぜ。なんらかのキーイベントは届いているワケだ。IMEが上がってこないだけでね。てなワケで、なんとかならんかとソースを持ってきて中を見てみることにした。この辺のことも考えてMSVC++5.0をわざわざノートPCに入れたんだしね。

というワケでWindows用ソースコード(winvnc-3.3.2r2_winsrc.zip)をもらってきて、COMPAQノートに展開してみたんだけど、ここで若干注意が。落としてきたソースのアーカイブの中には、ちゃんとWinVNC.dswというVC++5.0のWorkSpaceファイルが含まれていたんだけど、どうやってビルドするんだろ?と思って、一緒に入っていたBUILDING.txtを読んでみたら「WinVNCはWin32 No_CORBAでmakeしてね、DebugやReleaseだとエラーが出るよ」などと書いてあるでわないか。

MSのDeveloper Studioを使ったことのないUnixな人にちょっとだけ説明すると、WorkSpaceってのは早い話、Makefileやその他もろもろ、makeに必要な設定情報の類をひとまとめにしたものだと考えればいいと思う。で、Unixな環境でよくあるケースとして、autoconfで各種のプラットフォームに対応したり、make CFLAG="-g -O ..."などとしてdebug用にmakeしたりするのを、Developer Studioではあらかじめconfigurationとして登録しておき、ビルドする時点で選択するようになっているのだ。

見てすぐに見当がつくものとして、Debug、Releaseなんてのはデフォルトで用意されている。Profileとかその他、ちょっとすぐには何に使うのか他人が見たのでは見当がつかないようなconfigurationも作ることができる。で、WinVNCをビルドする時は、DebugやReleaseなどの普通のconfigurationではなくて、No_CORBAを選んでビルドしろよ、という注意書きがあった、というワケだ。

また、WorkSpaceにはProjectという考えがあり、これまた簡単に書くと、(建前上は)再利用可能なように、ひとまとめになっているソースツリーといったようなものだ。デフォルトでは1つなのだが、レイヤ構造を取って別々に開発し、最終的にまとめたりする場合もあるので複数のProjectが1つのWorkSpaceに含まれている、などという場合もある。Unixな世界だと、ghostscriptなどを想像するとわかるんじゃなかろうか。最終的な目的はgsをmakeすることだが、1回のmakeで、内部的にはlibjpegとかlibpngとかzlibとかをmakeしたりして、最後にgsにlinkしたりすると思うが、libjpegだってlibpngだって、単体でmakeすることができよう。あれと似たようなものだ。

WinVNCでは、メインとなるWinVNCの他に、VNCHooks、omnithreadというProjectが含まれていて、全部で3つのProjectで成り立っていた。で、よく見ると、No_CORBAというconfigurationでは、デバッグ情報付きでビルドしてくれないようだったので、No_CORBAのconfigurationをベースにデバッグ情報付きでビルドするためのDebug No_CORBAなるconfigurationを追加することにした。

とりあえず、言われたとおりNo_CORBAで一通りビルドして動作を確認(Linuxからvncviewerした)し、ビルド環境に問題がないことを確認した後に、いよいよデッチ上げのDebug No_CORBAでビルドして実行してみたら…

Msgsvr32で不正な処理

だってさ(-_-#) またかよ。どうしてアプリがアクセス違反しただけで、OSごとブチ落ちるかなぁコイツ。ほんと腐ってるよなぁWin95って。もうこうなると、電源切らない限りエラーの嵐で、シャットダウンすらできないんだもんね。

仕方がないので、せめてどこでブチ落ちるのかくらいは突き止めたいぞ、と思って、恐る恐る追いかけてみると、どうやらvncDesktopThread::Init()の中で、omni_mutex_lock()をコールした瞬間にブチ落ちているらしいことがわかった。

オレとしては、キー(特に仮想キー)のハンドリングまわりを追いかけたいだけなんだが、どうやらキーイベントの処理をしているのはWinVNC本体で、omni_mutex_lock()は名前のとおりomnithread のProjectに含まれている。こんなとこまで追える必要はないなぁ、もともとデバッグ情報なしのNo_CORBAでビルドしたヤツではエラーにならないんだし、などと思い直して、WinVNCのProjectだけデバッグ情報付きでビルドするようにして、その他のは元に戻した。

さて、この設定でビルドしたWinVNCをデバッガで追いかけつつ、Linux側からvncviewerで接続してみると…

おぉ!今度はブチ落ちないで動くぜ。

これでやっと、デバッガで振舞いを見ることができる準備が整ったワケだ。でももう明け方なんですけど…(笑) はぁ〜、あとはALT+~がどう扱われてるか見ることだな。今日の進捗はLinuxからvncviewerで、Win95上でデバッグ中のVNC鯖に接続してデバッグできるようになった、というところまでだ。


メール 戻る