Akira's Commentary

X-based VNC server

XvncはUnix用のVNCサーバで、 標準的なXサーバに基づいています。 アプリケーションはXvncを 通常のXディスプレイと同じように使うことができます。 しかし、実際にはサーバマシンの実際のディスプレイではなく、 接続されたVNC viewerに表示されます。

Xvnc structure

つまりXvncには二つのサーバが入っているわけです。 アプリケーションから見た場合にはXサーバとして動作し、 VNCのユーザから見た場合にはVNCサーバとして動作していることになります。 使い勝手がよくなるように、VNCサーバのディスプレイ番号が Xのディスプレイ番号と同じになるようにしています。つまり、 snoopy:2はXにおいてもVNCにおいても マシンsnoopyのディスプレイ番号2を指し示すことになります。

通常はvncserverスクリプトによって Xvncを起動します。 このスクリプトはXvncの起動を簡略化するためのもので、 perlで書かれています。 多くの場合、それぞれの使用環境に合わせて多少の手直しが必要でしょう。 直接Xvncを起動するよりも vncserverスクリプトで起動する方を薦めます。 しかしXvncは、いくつかの拡張が加えられている他は、 標準的なXサーバと同じオプションを持っていますので、 直接起動してもかまいません。 Xvnc -hでオプションの一覧が表示されます。

Getting Startedでいったように、 vncserverは全くオプション無しで起動することができます。 この場合には、 最初に見つかった利用可能なディスプレイ番号を選び、 Xvncをそのディスプレイ番号で起動し、 いくつかのアプリケーション(ウィンドウマネージャ等)を起動します。 vncserverは、また、 ディスプレイ番号を指定して起動することもできます。

vncserver :13

この場合には、指定されたディスプレイ番号が使用可能になっていれば そのディスプレイ番号でサーバを起動し、 使用可能になっていなければ(他で使われていれば)終了します。

他のオプションについては、-helpで一覧表示されます。 以下のオプションは特によく使われます。

-name name
各デスクトップは名前を持ち、 デスクトップ名はビューワによって表示されます。 デフォルトは「X」ですが、 このオプションによって変更することができます。
-geometry widthxheight
生成されるデスクトップのサイズを指定します。 デフォルトは1024x768です。
-depth depth
生成されるデスクトップのピクセルデプスを指定します デフォルトは8です。
-pixelformat format
サーバが使用するピクセルフォーマットを指定します。 フォーマットはBGRnnn、 あるいはRGBnnnで、 nはそれぞれのビット数を指定します。

vncserverには 標準のXサーバの引数も指定することができます。 それらの引数はXvncにそのまま渡されます。 Xvnc -hでオプションの一覧が表示されます。 Xvnc独自のオプションとして、 以下のものがあります。

-inetd
このオプションを指定すると、 Xvncinetdから 起動して使えるようにします。 詳しくは the extras page を御覧ください。
-alwaysshared
新しく接続してきたクライアントを常に共有させます。 クライアント側の共有指示は無視されます。
-nevershared
新しく接続してきたクライアントを常に共有させません。 クライアント側の共有指示は無視されます。
-dontdisconnect
新しい「非共有」の接続が要求された時に、既存の接続を切断しないで、 その代わりに新しい接続要求の方を拒否します。 新しい「共有」接続要求については通常と同じように接続されます。
-localhost
同一ホストからの接続要求だけを受け付けるようにします。 これはSSHを使用し、 SSH以外の他のホストからの接続を拒否する場合に便利です。 詳しくは using VNC with SSH を御覧ください。
-cc n
VNCサーバで使用されるカラービジュアルクラスを変更します。 通常の8ビットデプスのXvncでは 8ビットのTrueColorビジュアルを使用しますが、 ある種のXアプリケーションは このようなビジュアルでは正常に動作しません。 そのような場合には-cc 3で Xvncサーバに8ビットのPseudoColorビジュアルを 使用するように指示することができます。
-economictranslate
ビューワが、 サーバが使用しているネイティブのピクセルフォーマットと 異なったピクセルフォーマットを要求してきた場合、 サーバはピクセル値の変換のためにルックアップテーブルを使います。 このテーブルは、 接続しているクライアント毎に256KBのサイズになります。 多くのビューワを接続するような場合には、 このオプションによって、多少速度は低下するものの、 サーバが消費するテーブルのサイズを節約することができます。 このオプションは 16ビットデプスのデスクトップの場合だけ意味を持ちます。
-deferupdate n
"deferred update"がサポートされました。 これは、画面が更新された時に、 一定時間(デフォルト40ms)待ってから 画面更新をクライアントに通知するものです。 これによって通知される画面更新がまとめられますので、 表示が速くなります。 この遅延時間は -deferupdate オプションで変更できます。 これを0にすると、以前のXvncと同じ動作になります。

vncserverスクリプトを使用した場合には、 Xvncサーバ起動後に、 スクリプト~/.vnc/xstartupが実行されます。 VNCデスクトップの ウィンドウマネージャを替えたいような場合には このファイルを編集してください。 サーバはディレクトリ~/.vncにログを書き込みます。 コンフィギュレーション上の問題や、 起動に問題があった場合には、 このログファイルによって問題を調べることができます。

Reverse connections

Xvncからリッスン状態のビューワへの 逆方向のコネクションができるようになりました (通常はビューワからサーバにコネクションをはります)。

この機能は、WinVNCには前からありました。

これはヘルパープログラムの vncconnectによって行なわれます。 以下のように指示します。

vncconnect host

ここでhostは、 リッスン状態のビューワが動作しているホストです。 リッスンしているポート番号がデフォルトの 5500以外の場合には、 host:portとして指示します。 vncconnectは単純なXプログラムで、 ルートウィンドウのプロパティを変更します。 このプロパティの変更によって、 Xvncが実際にコネクションをはります。 この時、DISPLAY環境変数が 制御しようとするXvncを 示すようになっていなければなりません。 通常のXサーバに対して vncconnectを実行しても何もおきません。 また、コネクションが成功したか失敗したかの通知は、 Xvncのログファイルにしか現われません。 vncconnectを実行したコンソールには 何も表示されませんのでご注意ください。