Skip to content

翻訳記事:

  • RED HAT Magazineは、米国発の記事を翻訳したものです。

RED HAT SPEAKS

VNCによるバーチャルデスクトップの構築(パート2)

執筆者:Tim Waugh


はじめに

前号の「VNCによるバーチャルデスクトップの構築」では、VNCによるパーシステントデスクトップの設定方法とVNCビューアの使用方法について取り上げました。特に問題はなかったのではないかと思いますが、もし問題が発生した場合は、このトラブルシューティングガイドが役に立つでしょう。

よくある問題とその解決方法

VNCビューアを使用しようとしてサーバに接続できない場合、VNCサーバマシン上のファイアウォール設定をチェックしてみる価値があります。デフォルトのRed Hat® Enterprise Linux® 4ファイアウォール設定は、VNCが使用するIPポートをブロックします。そのため、ファイアウォールが有効になっている場合、Security Level Configurationアプリケーションを使用して適切なIPポートに接続できるようにする必要があります。このアプリケーションは、メニューの[Main Menu]-[System Settings]-[Security Level Configuration]にあります。

VNC接続は、5900から各ディスプレイ番号に1つずつナンバリングしたTCPポートを使用します。したがって、ディスプレイ5の場合、TCPポートは5905となります。また、Java VNCビューアでは5800から各ディスプレイ番号に1つずつナンバリングしたポートを使用します。

VNCのディスプレイ1と5への接続を可能にするには、[Security Level Configuration]ダイアログの[Other ports]部分に5901:tcp,5905:tcpを設定します。Java VNCビューアも有効にするには、5901:tcp,5905:tcp,5801:tcp,5805:tcpを使用します。

ファイアウォールを取り上げた場合、VNCがセキュアかどうかという、別の関連した問題が発生します。これに対する回答として、VNCをセキュアにすることはできるが、デフォルト構成の場合は誰かが傍受するのは比較的に簡単であると言えます。

VNC接続をセキュアにする最良の方法は、SSH(Secure Shell)からVNC接続をトンネルする方法です。この有用なプログラムは、リモートマシンへの暗号化された接続を提供します。Red Hat Enterprise Linux 4に同梱されたVNCビューアは、マシンのホスト名またはIPアドレスを受け取る-viaオプションの形でVNC接続をセキュアにする簡単な方法を提供します。

このオプションは、VNCビューアから指定マシン(通常はサーバ)へのSSHトンネルを設定します。すなわち、sshを使用し、vncviewerで作成されたTCP接続にまずSSHトンネルを経由させる方法で接続します。たとえば、VNCビューアをhoopoe.elkというマシン上のディスプレイ1にセキュアに接続するには、vncviewer -via hoopoe.elk :1というコマンドを実行します。

hoopoe.elk上のVNCサーバ側から見ると、ビューア接続はトンネルの動作方法のため同じマシンから来たようにみえます。これには、さらに、ローカルマシンからの接続のみを受け付けるように構成することにより、VNCビューア接続が暗号化されていないネットワーク上で行われないように保証できという利点があります。

VNCビューアがサーバに接続できない別の理由は、サーバそのものが実行していない場合です。/etc/sysconfig/vncserversファイルを使用するパーシステントデスクトップ構成では、VNCデスクトップを獲得しようとする各ユーザに対してVNCパスワードを設定することを忘れないことが重要です。VNCパスワードは、ログインパスワードとは別の設定であり、シェルプロンプトからvncpasswdコマンドを使用して設定する必要があります。

さらに、VNCビューアが接続できないもう1つの理由は、サーバは実行しているが、ディスプレイ番号が期待されたのと異なっている場合です。VNCサーバで使用されるディスプレイ番号を確認するには、サーバマシン上でps axf | grep Xvncの出力を調べます。パラメータが:1の場合、ディスプレイ番号1を示します。ディスプレイ番号0は通常、モニタ上の標準ディスプレイを指します。

VNCビューアに接続した後、ローカル画面のスクリーンセーバがフルスクリーンモードで実行しているVNCビューアと競合するという別の問題が発生する可能性があります。この問題の症状では、アイドルのままにされると、VNCビューアを実行しているマシンの画面がブランクになるか、スクリーンセーバが起動しますが、マウスを動かしたりキーボードから入力したりしても画面が通常の状態に戻らなくなります。これを回避するには、スクリーンセーバを無効にするか、スクリーンセーバが起動しそうな場合にフルスクリーンでのVNCビューアの実行を避けます。

起こり得る最後の問題は、VNCビューアに接続したが、期待した通常のログインデスクトップの代わりに、シェルプロンプトを含むウィンドウしか表示されない場合です。これは、最小のVNCセッションであり、 /home/username/.vnc/xstartup ファイルを編集して通常のログインデスクトップを実行するように変更できます。例1の「/home/username/.vnc/xstartup」に、編集前のこのファイルを示します。

#!/bin/sh

# 通常のデスクトップの場合は次の2行を非コメント化します。
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r \$HOME/.Xresources ] && xrdb \$HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title \"\$VNCDESKTOP Desktop\" &
twm &
例1. /home/username/.vnc/xstartup

VNCを高速化する方法

VNCの速度を調整するためのいくつかのオプションがあります。最初のオプションは、VNCでデータ転送時に使用されるエンコーディングです。いくつかのエンコーディングが使用でき、それぞれ、処理パワーと帯域幅のトレードオフが異なります。低い帯域幅であっても数多くのCPUパワーを使用できるマシンの場合、最良のエンコーディングは通常、ZRLEです。エンコーディングを選択するには、VNCビューアウィンドウでF8を押し、[Options....]を選択します。図1の 「オプションメニュー」に、オプションメニューを示します。

Options menu
図1. オプションメニュー

VNCを高速化するもう1つの簡単な方法は、色レベルを下げる方法です。ディスプレイの各色は、番号によって表され、色レベルが高いほどより多くの個別の色が表示できます。最小で、8色の各色を指定するには3ビット(2進数)必要です。最大で、24ビット、さらには32ビットまで可能です。トレードオフでは、より高い色レベルでディスプレイの表示を見栄えよく読みやすくします。 図2の「VNCの色レベル。上から下へ:full、medium、low、very low」は、それぞれのレベルの効果を示します。一番上が「full」で一番下が「very low」です。

VNC color levels.
図2. VNCの色レベル。上から下へ:full、medium、low、very low

要求される帯域幅を節減するもう1つの方法は、各更新のサイズを小さくするより、更新の頻度を減らす方法です。VNCが使用するプロトコルでは、ビューアがサーバから送信される画面の更新頻度を決定できます。ビューアが画面の更新を要求し、更新の準備ができるとサーバがそれを送信します。ビューアには、次の更新を要求するまで短時間待機するオプションがあります。これは、deferred update time(遅延更新時間)と呼ばれ、デフォルトは40ミリ秒です。このように待機すると、数多くの小さな画面変更を1つの大きいより効果的な更新にまとめることができます。

遅延更新時間は、VNCセッション内で実行しているシェルプロンプトから、vncconfigコマンドを使用して調整されます。vncconfig -listは、すべての調整可能なパラメータのリストを示し、各パラメータは、Xvnc manページに説明されています。遅延更新時間を100ミリ秒に設定するには、vncconfig -set DeferUpdate=100を使用します。

VNCは、コンピュータ間の画面更新をコピーして動作します。画面更新は、ピクセルの長方形ブロックです。ブロック内の全ピクセルが同じ色であれば、より簡単に圧縮できます。したがって、帯域幅をさらに節減する方法は、最も頻繁に更新される画面領域をすべて同色にする方法です。

最も効果が大きい画面領域は、背景の壁紙です。プレーンな壁紙とテーマを設定すると、VNCセッションの速度が格段に変わります。

クイック手順

VNCを高速化する方法をまとめた簡単なチェックリストは次のとおりです。

  1. 十分高速なCPUを持っている場合はZRLEへのエンコーディングを設定する
  2. 色レベルを下げる
  3. 遅延更新時間を長くする
  4. プレーンなテーマや壁紙を使用する

関連資料

執筆者について

Tim Waughは、Red Hatのシステムエンジニアで、スキャニング/プリンティング、DocBook、VNC、および一部のシェルユーティリティ関連の開発を主に担当しています。1995年からLinuxを使用しており、夫人と共にサリー州(英国)に住んでいます。