Akira's Commentary

VNCviewer for X (3.3.3 以降)

このドキュメントはバージョン3.3.3以降の Xtベースのビューワについての説明です。 以前のバージョンについては 古いXlibベースビューワのドキュメント [原文] [翻訳]の方を御覧ください。

コマンドラインからビューワを起動すると接続先を尋ねてきます。

vncviewer

あるいは以下のようにVNCサーバを指定します。

vncviewer snoopy:2

ここで「snoopy」はマシン名、 「2」はそのマシン上で動作しているVNCサーバのディスプレイ番号です。 マシン名、ディスプレイ番号は省略することができます。 マシン名を省略して「:1」とすれば 同じマシンのディスプレイ番号1のサーバに、 ディスプレイ番号を省略して「snoopy」とすれば マシンsnoopyのディスプレイ番号0のサーバになります。

VNCサーバに正常に接続できたなら、 ビューワを認証するためのパスワードを尋ねてきます。 パスワードが正しければ VNCサーバのデスクトップを表示するウィンドウが現われます。

ビューワには、さまざまなアクションを実行するボタンを含んだ ポップアップウィンドウがあります。 ポップアップウィンドウは通常はF8キーで呼び出されます。 このポップアップウィンドウを呼び出すキー、 更にポップアップウィンドウの内容もカスタマイズ可能です。 ポップアップウィンドウのボタンによって実行される機能には 以下のようなものがあります。

  • フルスクリーンモードと通常のモードとの切り替え
  • ビューワの終了
  • 任意のキー、マウスイベントの生成、例えばctrl-alt-delの送出
  • VNCサーバとのクリップボードの転送

デフォルトでは、ポップアップウィンドウでのキー入力は VNCサーバに送出され、ポップアップウィンドウを消去させます。 ですから、F8キーを2度押せばVNCサーバにF8キーが送られます。

ポップアップウィンドウのカスタマイズについては 後述のカスタマイズの節を御覧ください。

フルスクリーンモード

フルスクリーンモードがサポートされました。 これは接続先のリモートデスクトップのサイズが ローカルディスプレイのサイズと同じ場合に便利です。 リモートデスクトップのサイズが ローカルディスプレイよりも大きい場合には、 マウスをスクリーンの端に持っていけばスクロールできます。

不幸なことに、フルスクリーンモードは ウィンドウマネージャによっては正常に動作しないことがあります。 それは、ウィンドウマネージャによっては Xのウィンドウ管理の規約を守っていないものがあるためです。 なお、ノーマルモードからフルスクリーンモードに切り替えた時より、 最初からフルスクリーンモードで起動した場合の方が うまく動作するようです。

コマンドラインオプション

「vncviewer -h」でオプションの一覧が表示されます。 大抵のオプションはXリソースからでも指示することができます。 Xリソースについては後のカスタマイズの節を御覧ください。

-shared
新たにVNCサーバに接続すると、 通常は既存の接続はすべて切断されます。 しかし、このオプションを指定すると既存の接続が維持され、 複数のビューワで同じリモートデスクトップを共有することができます。

プロトコル上はこうなっているのですが、 最近のサーバではサーバ側でも共有指定ができるようになっています。 サーバ側で共有/専有を指示した場合にはサーバ側の指示が優先され、 ビューワ側での指示は無視されます。

-display Xdisplay
VNCviewerのウィンドウが表示されるXディスプレイを指定します。

指定されていなければ 環境変数DISPLAYで指示されるXディスプレイに表示されます。

-passwd password-file
もし、VNCサーバが使用するパスワードファイルにアクセスできるなら、 これを指定することによってパスワードの入力をしないで済みます。 パスワードファイルは通常「~/.vnc/passwd」です。
-viewonly
このオプションを指定すると、 ビューワからのキー入力やマウス操作はサーバに渡されなくなります。 他の人が使っているリモートデスクトップを 邪魔しないで見るような場合に便利です。 多くの場合、「-shared」オプションと組み合わせて使用します。
-fullscreen
ビューワをフルスクリーンモードで起動します。
-geometry geometry
標準のXの位置とサイズの指定です。

これで指定されるのはビューワのウィンドウの位置とサイズです。 リモートデスクトップのサイズは変更できません。 リモートデスクトップのサイズは、 Windows/Macサーバの場合には実際の画面サイズ、 Xvncサーバの場合にはサーバ側の起動時オプションで 決まります。

-bgr233
これは、VNCサーバにピクセルデータを 8ビットデプスで送るように指示するものです。 もしサーバデスクトップのピクセルデプスがこれよりも大きければ、 送信前に8ビットピクセルに変換されます。 これによりネットワーク上に送られるデータ量が減少します。 これは低速のリンクを使っている場合には有利です。 しかしサーバへの負荷は増大しますし、 多少色が変になることがあります。
BGR233というのは 8ビットのTrue Colourのピクセルフォーマットで、 上位2ビットがblue、次の3ビットがgreen、最後の3ビットがredを 表現します。 このフォーマットはJavaクライアントでも使用されています。
-encodings encodings
このオプションではビューワが使用するエンコーディングを その好ましい順序で、スペースで区切って指定します。 デフォルトは、
copyrect hextile corre rre
あるいはサーバとビューワが同一マシンの時は
raw copyrect hextile corre rre
となっています。 例えば、Raw、CopyRectだけを受け付ける場合には、
-encodings raw copyrect
と指定します。
-owncmap
vncviewerはPseudpColorクラスのXビジュアルと プライベートColormapを使用します。これによって VNCサーバがカラーマップを操作できるようになります。
-truecolour
vncviewerはTrueColorクラスのXビジュアルを探して使用します。
-depth d
これはビューワが表示されているXサーバが 複数のデプスをサポートしている場合だけ意味を持ちます。 そのようなディスプレイでは、vncviewerは指示された デプスのビジュアルを探します。 そのようなビジュアルが見つかったなら、 そのビジュアルに適したピクセルフォーマットをサーバに要求します。 このオプションでは特定のデプスをサーバに要求することはできません。 それができるのは「-bgr233」オプションだけです。
-listen
このオプションを指示すると、 VNCビューワは5500+<ディスプレイ番号>のポートで VNCサーバからのリバースコネクションを受け付けるようになります。 WinVNCでは、メニューのAdd New Client、 あるいはコマンドラインの-connectオプションで リバースコネクションを指示することができます。 また、Xvncでもヘルパープログラムの vncconnectを 使ってリバースコネクションを指示することができるようになりました。
このオプションは、AT&Tの内部版のVNCでも使われています。

Xリソースのカスタマイズ

Xリソースによってvncviewerの動きをカスタマイズすることができます。 Xリソースは、 「.Xresources」のようなアプリケーションデフォルトファイル、 あるいはコマンドラインの「-xrm」オプションによって 設定することができます。 Xリソース設定の詳細については Xウィンドウシステムのドキュメントを御覧ください。

アプリケーションリソースには以下のものがあります。

shareDesktop (option -shared)
接続時に他のビューワを接続したままにするかどうかを指示します。 デフォルトはfalseです。
viewOlny (option -viewonly)
キーボード、マウスイベントを抑止します。 デフォルトはfalseです。
fullScreen (option -fullscreen)
フルスクリーンモードで動作します。 デフォルトはfalseです。
passwordFile (option -passwd)
パスワード(vncpasswdで生成されたもの)を 読み込むファイルを指定します。 デフォルトはnullで、ユーザにパスワードを尋ねます。
passwordDialog
ダイアログでパスワードを入力するか(true)、 ttyからパスワードを入力するか(false)を指示します。 パスワードファイルが指示された場合には無効になります。 デフォルトはfalseです。
encodings (option -encodings)
ビューワが使用するエンコーディングをその好ましい順序で、 スペースで区切って指定します。 デフォルトはnullで、その場合には
copyrect hextile corre rre
あるいはサーバとビューワが同一マシンの時は
raw copyrect hextile corre rre
となっています。
useBGR233 (option -bgr233)
ビジュアルの如何に係わらず、 BGR233の8ビットピクセルフォーマットを使用します。 デフォルトはfalseです。 しかし、TrueColorではないビジュアルで forceOwnCmapがfalseの場合には、 いつでもBGR233が使用されます。
nColours
BGR233の場合にはBGR233のカラーキューブから ここで指示された数だけ正確な色を割り付けようとします。 共有カラーマップが使われた場合には、 このリソースを設定することによって 他のXクライアントに残される色数を下げることができます。 TrueColorの場合には意味を持ちません。 デフォルトは256色、すなわち全部、です。
useSharedColours
割り付けることができた「正確な」BGR233の色数が256色以下の場合、 残りの色については「もっとも近い」色が使用されます。 このリソースは「正確な」色を使うのか、 あるいは他のクライアントと色を共有するかを指定するものです。 デフォルトはtreuで、他の、クライアントと色を共有します。
forceOwnCmap (option -owncmap)
vncviewerはPseudpColorクラスのXビジュアルと プライベートColormapを使用します。 デフォルトはfalseです。
forceTrueColour (option -truecolour)
vncviewerはTrueColorクラスのXビジュアルを探して使用します。 デフォルトはfalseです。
requestDepth (option -depth)
forceTrueColourがtrueの場合、 指示されたデプスのビジュアルを使用します。 デフォルトは0で、この場合には任意のデプスを使います。
useSharedMemory
サーバとビューワが同じマシンで動作する時に、 MIT-SHM(shared memory extension)を使用することを指示します。 デフォルトはtrueです。
wmDecorationWidth
wmDecorationHeight
ウィンドウマネージャデコレーションの幅と高さを指定します。 これらの値はVNC viewerの最大サイズの計算に使われます。 デフォルトは幅4、高さ24です。
bumpScrollTime
bumpScrollPixels
フルスクリーンモードで、リモートのVNCデスクトップが ローカルのXディスプレイよりも大きければ、 マウスをスクリーンの端に持っていくと画面がスクロールされます。 この時の最大のスクロールのスピードが、 「bumpScrollTime」ミリ秒毎に 「bumpScrollPixel」ピクセルの移動として制限されます。 もちろん実際のスクロール速度は、 マシン/Xサーバがどれだけ速いかによりますが、 これよりも遅くなります。 デフォルトは25ミリ秒毎に20ピクセルとなっています。
popupButtonCount
ポップアップウィンドウ内のボタンの数を指示します。 ポップアップウィンドウのボタンを どのようにカスタマイズするかは後の節で説明します。
rawDelay
copyRectDelay
これらのリソースはVNCサーバ/ビューワのデバッグ用のもので、 スクリーンのどの領域が更新されるかをチェックします。 矩形領域の更新の度に、 vncviewerはここで指示されたミリ秒の間 更新領域を黒い矩形で示します。 「rawDelay」はRawエンコーディングで通知される矩形領域、 「copyRectDelay」はCopyRectエンコーディングで通知される矩形領域 についての設定になります。 デフォルトは0で、ハイライト表示は行なわれません。

ポップアップウィンドウのカスタマイズ

ポップアップウィンドウ上のボタンの数を 「popupButtonCount」リソースで設定します。

*popupButtonCount: 2

それぞれのボタンについて、ラベルを設定し、 ボタンプレスイベントに対する トランスレーションを書き換えます。

    *popup*button1.label: Left mouse button click at 100,100
    *popup*button1.translations: #override\n\
        <Btn1Down>,<Btn1Up>: SendRFBEvent(ptr,100,100,1)\
	                     SendRFBEvent(ptr,100,100,0)
    *popup*button2.label: Send "Think thin!"
    *popup*button2.translations: #override\n\
        <Btn1Down>,<Btn1Up>:\
            SendRFBEvent(key,T) SendRFBEvent(key,h)\
            SendRFBEvent(key,i) SendRFBEvent(key,n)\
            SendRFBEvent(key,k) SendRFBEvent(key,space)\
            SendRFBEvent(key,t) SendRFBEvent(key,h)\
            SendRFBEvent(key,i) SendRFBEvent(key,n)\
            SendRFBEvent(key,exclam)

デスクトップウィンドウのカスタマイズ

デスクトップウィンドウのトランスレーションも 書き換えることができます。 例えば、ポップアップウィンドウを呼び出すためのキーを F8からエスケープに変更し、 またF12でフルスクリーンモード、ノーマルモードを 切り替えるようにするには以下のように設定します。

    *desktop.translations: #override\n\
        <Key>F8: SendRFBEvent()\n\
	<Key>Escape: ShowPopup() \n\
	<Key>F12: ToggleFullScreen()
      

アクション

トランスレーションでは 以下のアクションを使用することができます。

ShowPopup()
HidePopup()
ポップアップウィンドウを表示、消去します。
SendRFBEvent()
VNCサーバにRFBイベントを送出します。 引数無しの場合にはアクションの元になった Xイベントと同等のRFBイベントを送出します。 引数が指定された場合には、 引数によって決まる以下のキー、マウスイベントを生成します。
  • SendRFBEvent(keydown,keysym)
  • endRFBEvent(keyup,keysym)
  • SendRFBEvent(key,keysym)    keydown、keyupの組み合わせに相当
  • SendRFBEvent(ptr,x,y,buttonMask)
  • SendRFBEvent(ptr,buttonMask)
ここで、
  • keysymはX keysymの文字列表現です。 これを求めるには、"xev"を使うか、 "/usr/include/X11/keysymdef.h"から 先頭の"XK_"を取り除いてください。
  • xyは ポインタイベントで通知されるポインタ位置です。 省略された場合には アクションの元のXイベントの位置が使用されます。
  • buttonMaskは マウスボタン1~8の状態を示すビットマスクで、 ビット0~7がそれぞれボタン1~8に対応し、 ビット値0はボタンアップを、 ビット値1はボタンダウン(押下)を示します。 ですから、 マスク値0はボタンが何も押されていないことを、 マスク値1はボタン1が押されたことを、 マスク値5はボタン1、3が押されたことを示します。
SelectionToVNC()
ローカル側のXセレクション あるいはカットバッファの内容をVNCサーバに送ります。 通常はマウスがビューワウィンドウに入った時に呼び出されます。 引数無し、あるいは「new」の場合には、 新しい、送られていないセレクションだけが送出されます。 引数が「always」なら何度でも送出されます。
SelectionFromVNC()
ローカル側のXセレクションあるいはカットバッファに VNCサーバから送られてきたカットテキストをセットします。 通常は マウスがビューワウィンドウから出た時に呼び出されます。 引数無し、あるいは「new」の場合には、 新しい、まだセットされていないカットテキストだけをセットします。 引数が「always」なら何度でもセットされます。
Quit()
VNC viewerを終了させます。
Pause()
指示されたミリ秒の間ポーズします。 デフォルトは100ミリ秒です。 これはSendRFBEventでイベントを生成する時に 間を置くのに使います。
ToggleFullScreen()
フルスクリーンモードとノーマルモードとを切り替えます。
SetFullScreenState()
トグルウィジェットの"state"リソースに フルスクリーンモードかどうかの状態を反映させます。
ServerDialogDone()
PasswordDialogDone()
それぞれのダイアログボックスへの入力が完了したことを通知します。 通常はリターンキーで呼び出されます。

Widget階層

vncviewerでは以下の階層のウィジェットが使われています。 Xに詳しい方は必要に応じて それぞれのウィジェットのリソースを変更してください。

Main Window:

    Vncviewer   vncviewer
      From        from
        Viewport    viewport
	  Core        desktop

Server dialog box:

    TransientShell  passwordDialog
      Dialog          dialog      

Password dialog box:

    TransientShell  passwordDialog
      Dialog          dialog      

Popup window:

    TransientShell  popup
      Form            buttonForm
       Command/Toglle   button1
        :                 :
       Command/Toglle   buttonN