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 キーパッドキーを識別可能にします。
無論これは私と同じ環境でしか使えません。実際に使うには、スキャンコー
ドをご使用の環境でのものに変更してください。