VNC Viewer for OS/2 PM, Version 1.00 akira@sra.co.jp _What is VNC ? VNC (Virtual Network Computing) は ORL (The Olivetti & Oracle Research Lab)で開発されたシステムで、リモートマシンのデスクトップを手 元のマシンから使うようにするものです。 1999/01、ORLはAT&Tに買収されて、AT&T Laboratories Cambridge に なりました。 詳しくは VNC - Virtual Network Computing を御覧ください。 _VNC Viewer for OS/2 PM OS/2 から VNC でリモートデスクトップにアクセスするには、X版(Xfree 86/2版がありますが、別にOS/2用でなくても表示はできます)、Java版が使 えます。しかし、X版を使うにはXサーバが必要ですし、Java版はメモリを 大量に消費します(リソースモニタによると 10MB以上使っているみたいです)。 本来 VNC viewer は軽量クライアント、としてデザインされたはずのものな のに、現状ではとても重くて(手元の環境では)使用に耐えません。そこで、 しょうがないので、軽量クライアントを目指して、PM版の VNC viewerを作 ることにしました。 _Setting up VNC Server 無論、VNC viewerだけでは何の役にも立ちません。VNC Viewerを使うには、 それ以前にVNC serverが立ち上がっていなければなりません。VNC のページ では、Unix、Win95/NT、Mac 用のサーバが公開されています。サーバの詳細、 設定についてはVNC のページ を御覧ください。 _Start VNC Viewer サーバ側の準備は結構大変ですが、viewerの方の準備はごく簡単で、実行モ ジュールをPATHの通ったディレクトリに置くだけでOKです。あとはコマン ドラインから起動するなり、プログラムオブジェクトを作って起動するだけ で済みます。 なお、本プログラムはEMX/GCC で作成されていますので、実行にはEMX のランタイム(0.9c以上)が必要です。これは別途入手してセットアッ プしておいてください。 コマンドラインからは vncview [ <接続先> ] [ <オプション> ... ] で起動します。接続先は「host:display」の形式で、 snoopy:2 といった形式で指示します。なお、接続先は、起動した後のセッションダイ アログからでも指示、変更できます UNIX上のVNC サーバの場合には、サーバの起動時に上の形式でホスト名 とディスプレイ番号が表示されます。 Windows のVNC サーバの場合は、通常ディスプレイ番号は0 です。 オプションには以下のものがあります。 ・ピクセルフォーマットの指示 -true サーバに対して32ビットTrueColorでの転送を要求します。 ビューワ内部では24ビットTrueColorで描画します。 -bgr233 サーバに対してBGR233の8ビットフォーマットでの転送を 要求します。ビューワ内部でもBGR233で描画します。 -tiny サーバに対してBGR233の8ビットフォーマットでの転送を 要求します。ビューワ内部では、デフォルトの16色で描画 します。 -gray サーバに対してBGR233の8ビットフォーマットでの転送を 要求します。ビューワ内部では、4階調のグレイスケール で描画します。 デフォルトでは32ビット形式になります。OS/2では、内部の表示色数と ディスプレイの実際の表示色数が異なっている場合には、PMが適当に色 を変換して表示してくれますので、どのようなディスプレイを使ってい るかとは無関係にピクセルフォーマットを指示することができます。 ただし、それぞれのピクセルフォーマットには以下のような問題があり ますので、これらの点に注意した上で、ピクセルフォーマットを指示し てください。  ・サーバに対してBGR233フォーマット要求すると、サーバ側で色が変 換されます。色が重要になるようなアプリケーションを使う場合に は、True Colorフォーマットを使ってください。  ・True Colorフォーマットを使うと、サーバ、ネットワークの負荷が 増大します。低速のネットワーク、サーバを使う場合にはBGR233フォー マットの方が速くなります。  ・PMでの色の変換が行なわれると、OS/2側での負荷が増大します。64K 色以上の環境ではほとんど問題になりませんが、256色、16色の環境 では変換の負荷がばかになりません。このような場合、-tinyでなら PMでの色変換が発生しませんので、特に低速のCPU、グラフィックア ダプタを使っている場合には役に立つと思います。  ・-tiny ではなるべく色相を保持するようにしていますが、場合によっ ては見難くなります。このような場合には-gray の方がかえって見易 くなります。 ・エンコーディング方式の指示 -hextile Hextile エンコーディングを優先します -corre CoRRE エンコーディングを優先します -rre RRE エンコーディングを優先します -raw RAW エンコーディングを優先します デフォルトでは Hextile エンコーディングが優先されます。ただし、現 在のビューワは、矩形フィルが重いため、RRE/CoRRE/Hextileのエンコー ディングではシステムの負荷がかなり重くなります。CPU 負荷が重いよ うでしたらRAW エンコーディングを試してみてください。しかし、RAW エンコーディングでは圧縮が効かなくなるので、ネットワークが遅い場 合には逆効果になります。一般的には、デフォルトのHextile が一番無 難なようです。 ちなみに、Java版でもRAW エンコーディングにすると描画が速くなっ たりします。Windows 版は逆に、RAW エンコードにすると、ぐっと 遅くなりますね。 なお、本ビューワでは「CopyRect」は常に有効になります。 ・その他のオプション -shared リモートデスクトップを他のビューワと共有することを指 示します。このオプションを使うと、複数のビューワで同 一のデスクトップを見ることができます。 -viewonly キー、マウス入力を禁止します。 -deiconify 最小化されている場合、ベルでリストアするように指示し ます。シャットダウンメッセージなんかを見逃さないよう できます。 -dialogAtCenter -dialogAtMouse ダイアログの表示位置を指示します。「-dialogAtCenter」 ではスクリーン中央に、「-dialogAtMouse」ではマウス位 置にダイアログを表示します。デフォルトではマウス位置 に表示されます。 -passwd passwdfile サーバのパスワードファイルにアクセスできる場合、この オプションでパスワードファイルを指示すると、接続時の パスワード入力が不要になります。Xvncと組み合わせて使 う場合に便利です。 -keymap keymapfile キーマップファイルによって、スキャンキーコードと、そ れに対応して送出されるVNCプロトコルのキーコードと の対応を指示します。これにより、通常は区別されない左 右のシフト/コントロールキーを区別して扱ったり、NLS キーをサーバに通知したりすることが可能になります。 キーマップファイルの使い方については後述の 「Keymap File」 の節を御覧ください。 _Session / Option Dialog VNC viewerを起動すると、最初にセッションダイアログが表示されます。 ┌─┬──────────────────────────┐ │ │PM VNC Viewer - connect to │ ├─┴──────────────────────────┤ │┌──┐ ┌───────┬─┐┌────┐│ ││VNC │ VNC Server : │ │▼││Connect ││ ││ │ └───────┴─┘└────┘│ │└──┘ ┌────┐│ │ Use host:display │ Cancel ││ │ └────┘│ │ e.g. snoopy:2 ┌────┐│ │ │Options.││ │ └────┘│ └────────────────────────────┘ サーバ名のフィールドには、起動時に指示されたサーバ名が表示されます。 起動時の指示がなければ、最後に接続したサーバ名が表示されます。サーバ 名のフィールドはプルダウンリストになっており、以前に接続したサーバ名 が記録されていますので、そこから以前に接続したサーバ名を選択すること もできます。 セッションで使用されるオプションを確認、変更するには、オプションボタン を押して、オプションダイアログを呼び出します。 ┌──────────────────────┐ │Session Options for │ ├──────────────────────┤ │ ┌─────────┬─┐│ │Pixel Format │True Color │▼││ │ └─────────┴─┘│ │ ┌─────────┬─┐│ │Preferred Encoding│Hextile │▼││ │ └─────────┴─┘│ │ ┌────┐│ │ □ Request shared session │Connect ││ │ └────┘│ │ □ View only ┌────┐│ │ │ Back ││ │ □ Deiconify on Bell └────┘│ └──────────────────────┘ コマンドラインでオプションが指示されていれば、オプションダイアログで はそれらの指示が反映されます。特に指示されなかった場合、接続先のサー バを以前にも使っていれば、その時のオプションが反映されます。これら以 外の場合にはデフォルトの設定が使用されます。 接続先のサーバ名、オプション設定を確認して、「Connect」 ボタンを押せ ば、サーバへの接続を開始します。 _Authentication 指示されたVNC サーバがちゃんと存在していれば、サーバはユーザ認証を求 めてきます。そうなると、ビューワでは次のパスワードダイアログが表示さ れます。 ┌─┬──────────────────────────┐ │ │PM VNC Viewer - authentication │ ├─┴──────────────────────────┤ │ ┌────┐│ │┌──┐ ┌───────┐│ OK ││ ││VNC │ Session password:│ │└────┘│ ││ │ └───────┘┌────┐│ │└──┘ │ Cancel ││ │ └────┘│ └────────────────────────────┘ パスワードはサーバ側に設定したものです。Xvncですとvncpasswdで、 WinVNCの場合にはPropertyで指示したものを使います。 -passwd オプションでパスワードファイルを指示した場合にはこれは表示さ れません。 _Remote Desktop パスワードが正しければ、実際のVNC セッションが開始され、リモートデス クトップのウィンドウが表示されます。 以前に同じサーバを使っていたなら、以前のウィンドウ位置、サイズでリモー トデスクトップが表示されます。新たなサーバを使う場合には、リモートデ スクトップのサイズがPMの画面よりも小さければ、その全体が表示されま す。リモートデスクトップがPMの画面よりも大きければ、その一部だけが 表示されます。 表示されるウィンドウのサイズは、サイズボーダをドラッグして変更するこ とができます。しかし、リモートデスクトップのサイズよりも大きくするこ とはできません。ウィンドウがリモートデスクトップよりも小さい場合には スクロールバーが有効になり、スクロールバーによって、ウィンドウ上に表 示されるリモートデスクトップの位置を動かすことができます。 なお、ウィンドウが最小化されている間は画面の更新(サーバへの要求)が 行なわれません。最小化することによって、ネットワーク、サーバへの負荷 を軽減することができます。 _Key and Mouse マウスがビューワのウィンドウ上に入っていれば、マウスの移動、クリック はリモートマシンに通知されます。ビューワウィンドウがフォーカスを持っ ていれば、キーイベントもリモートマシンに通知されます。 ただし、PMでフックされているキーコンビネーションについては、そのま まPM側で処理されます。例えば、 CTRL-ALT-DEL OS/2がリブートしてしまいます CTRL-ESC タスクリストが表示されます ALT-TAB フォーカスが移動します といった具合になります。このような特別なキーをリモートマシンに通知し たい場合には、メニュー、あるいはアクセラレータキーを使ってください。 なお、ALT キーコンビネーションについては、すべてPM側で処理されるよ うになっていて、一切リモートマシンには送られませんのでご注意のほどを。 _Menu and Accelerator このビューワでは、システムメニューが拡張されていて、そこから、特別な キー通知を送ったり、ビューワのローカル機能を実行させることができます。 システムメニューには以下のメニュー項目が追加されています。 メニュー項目 アクセラレータ Connection options... Alt-O Connection info Alt-I Request screen refresh Alt-R Copy Alt-Y Paste Alt-P Send Control Key Ctrl Key Toggle Alt-C Ctrl Key Down Ctrl Key Up Send Alt Key Alt Key Toggle Alt-A Alt Key Down Alt Key Up Send Function Key F1 ... F12 Send C-A-D Alt-D Send Ctrl-Esc Alt-E Send Alt-Tab Alt-T About VNC Viewer Alt-B 「Connection options」を指示するとオプションダイアログが表示されて、 一部のオプションを変更することができます。 「Connection info」では、現在のセッションの情報が表示されます。 「About VNC Viewer」 では、現在のビューワの説明が表示されます。 「Request screen refresh」は画面の再表示を指示します。リモート画面が おかしくなったような時に指示してください。 「Copy」、「Paste」 はリモートマシンとの間でのカット&ペーストを指示 します。「Copy」は、リモートマシン側でクリップされたデータをPM側に 取り込み、「Paste」 はPM側のクリップデータをリモートマシンに送りま す。これらによって、リモート/ローカルマシン間でのカット&ペーストが 可能になります。 「Send Control Key」「Send Alt Key」はALTキー、CTLキーのダウン、アッ プを指示するものです。PMでフックされているキーコンビネーションをリ モートマシンに送りたい場合にはこれらの機能を使ってください。例えば、 リモートマシンに Alt-F4 を通知するには Alt-A F4 Alt-A とします。よく使われる組み合わせについては別途メニュー項目が用意され ていますので、そちらを使っても同じ結果が得られます。 Send C-A-D Alt-D Send Ctrl-Esc Alt-E Send Alt-Tab Alt-T なお、Ctrl、Alt キーの状態については、タイトルバー右側に表示されます。 そこをクリックすることによって、状態をトグルすることもできますし、そ こでポップアップメニューを呼び出して、キーのアップ/ダウンを指示する こともできます。 ファンクションキーの一部も、PMでフックされていますので、ファンクション キーを送信するためのメニューも用意しました。 _Keymap File キーマップファイルは、スキャンキーコードと、それに対応してVNCサー バに送出されるキーイベントとの対応を定義するものです。 このビューワは、通常では、スキャンコードは見ていません。それは、スキャン コードがキーボード依存で、一般的に取り扱うことができないためです。 しかし、このために、左右のシフト/コントロールキーの区別がつきません し(どちらも左側のシフト/コントロールキーとして扱われます)、キーパッ ドキーも区別できません。 このためにある種のリモートアプリケーションが使用できない、という問題 が発生します。このような問題を回避するために、スキャンキーにVNCの キーイベントを直接対応付ける機能を追加しました。 これにより、通常は区別されない左右のシフト/コントロールキーを区 別して扱ったり、NLSキーをサーバに通知したりすることが可能にな ります。 キーマップファイルはテキストファイルで、各行に、スキャンキーコード (16進2桁)と、そのスキャンコードに対応してVNCプロトコルで送出 されるキーイベントコード(16進)とを記述します。#ではじまる行はコ メント行になります。例えば、私の手元のキーボードで、右のシフト、コン トロールキーを通知する場合には、以下のように記述します。 # Right Shift Key -> XK_Shift_R 36 FFE2 # Right Control Key -> XK_Control_R 5B FFE4 最初の数字(16進)がPMのスキャンキーコードです。これはキーボード に依存しますので、各自のキーボードに合わせて記述してください。私は、 昔懐かしのPetzold の本のサンプルの'keylook' でスキャンコードを確認し ました。 後の数字(16進)が対応してVNCサーバに送出されるキーイベントコー ドです。これは、実際にはXのキー定義そのもので、「keysymdef.h」 で 定義されています。アーカイブ付属の「ketsymdef.h」 を見てその値を設定 してください。 アーカイブには、サンプルとして、私の手元のキーボードでのマップファイ ルを付加してあります。 right.map 右側のシフト、コントロールキーを識別可能にします。 keypad.map キーパッドキーを識別可能にします。 無論これは私と同じ環境でしか使えません。実際に使うには、スキャンコー ドをご使用の環境でのものに変更してください。