このページではLinuxで構築した自宅サーバーVNCを利用するためのvncserverの基本設定について初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
VNCサーバーの構築

VNCについて

サーバー機の環境について

VNCクライアントの準備

VNCサーバーの基本設定

VNCサーバーのお便利設定

VNCサーバーの一括起動

SSH転送による暗号化接続


VNCサーバーの構築に必要なファイル

この コンテンツ に従って普通に WBEL CentOS インストール すると、 vnc-server とその設定に必要なファイル類は既に 構築中のLinuxサーバー にインストールされているはずです。

以下に、WBELやCentOSにインストールされているvnc-serverで、操作や設定が必要なファイルを示します。

それ以外の ディストリビューション をお使いの場合や、標準添付以外のパッケージをインストールした場合には、ファイル名やディレクトリの パス が以下とは異なる場合がありますので注意してください。

vnc-serverの必要ファイル一覧
vnc-serverの必要ファイル一覧

不特定多数の クライアント にサービスを提供することが基本の httpd named などと異なり、vnc-serverは一般に個別の ユーザーアカウント から vnc-serverの実体プログラムである Xvnc デーモン として起動して使用します。

ただし、実際にXvncを直接起動することはまずありません。

vnc-serverには Perl スクリプト である "/usr/bin/vncserver" が準備されていて、基本的にはこれひとつでXvncの起動や終了、vnc-server全般の初期設定などを行うように設計されています。

vnc-serverに付属する "/usr/bin/vncpasswd" は、 VNC クライアントがサーバーに接続するときのパスワードを生成・変更するための コマンド です。

基本的には任意のユーザーアカウントから vncpasswd と実行してパスワードをタイプするだけ、という使い方になります。

実際には、ユーザーアカウントに対して初めてvncserverを設定を行うとき、このコマンドは "/usr/bin/vncserver" から自動的に呼び出されて新規にパスワードの生成を行いますから、 "/usr/bin/vncpasswd" を直接使用するのは既存のパスワードを変更する場合に限られるでしょう。

任意のユーザーアカウントから初めて "/usr/bin/vncserver" を実行すると、 ホームディレクトリ 以下にディレクトリ ".vnc/ とファイル .Xauthority が作成されます。

".vnc/ の中には、VNCクライアントから接続したときに起動するデスクトップ環境設定ファイル xstartup 、パスワード記述ファイル passwd などが保存されます。

.Xauthority は、 X-Window を利用するときにも作成されるファイルですが、この passwd がセットされると同時にユーザーアカウントのパスワードとの橋渡しの設定値がセットされ、VNCで設定したパスワードだけで ログイン できるようになります。

前述のとおりXvncデーモンの起動も "/usr/bin/vncserver" から行いますが、VNCサーバーの利用形態の性質上、Xvncデーモンの起動(つまり"/usr/bin/vncserver"の実行)は "root" アカウント からだけではなく、任意のユーザーアカウントからも行えますし、 サーバー機 の性能が許す限り幾つでもサーバーデーモンを起動することができるようになっています。

例えば起動方法と終了方法は任意のユーザーアカウントから、

"/usr/bin/" には通常 パス が通っていますので パスが通っていないディレクトリにあるファイルの実行 、パスを省略して実行することができます。
「ディスプレイ番号」 については後ほど説明します。

"vncserver :1" →vncserverをディスプレイ番号1番でXvncを起動

"vncserver -kill :1" →稼働中のディスプレイ番号1番のXvncを終了

というように実行します。

Xvncデーモンの終了は、原則としてそのデーモンを起動したユーザーアカウントから行うことになります。

vnc-serverはこのようにユーザーアカウントごとにデーモンを起動して利用するのが一般的ですが、 "/etc/sysconfig/vncservers" にvnc-serverを利用するユーザーアカウントを予め記述しておき、起動スクリプト "/etc/rc.d/init.d/vncserver" で一括して複数のXvncデーモンを起動することもできます。

また"/etc/rc.d/init.d/"の シンボリックリンク が"/etc/init.d/"になっていますので、この起動スクリプトは "/etc/init.d/vncserver" でも呼び出すことができます。

例えば、

"/etc/rc.d/init.d/" には パス が通っていません パスが通っていないディレクトリにあるファイルの実行 から、パスを省略して実行することはできません。

"/etc/init.d/vncserver start" →vncserverの起動

"/etc/init.d/vncserver stop" →vncserverの停止

という使い方になります。

vnc-serverはこのように、

・VNCを利用したいユーザーが自分で個別にXvncデーモンを起動して利用する。

・管理者が利用を許可するユーザーに対して一括してXvncデーモンを起動し、接続環境を提供する。

という二通りの使い方ができるようになっています。

前者の方法についてはこのページの次の項目から説明します。

後者の方法についても、ひとまずは個別にXvncを起動できるようにしておく必要がありますから、同様にこのページの次の項目からご覧の上、 VNCサーバーの一括起動 へお進みください。

このページの先頭へ↑

vncserverによる初期設定とVNCクライアントからの接続

vnc-server は、 構築中のLinuxサーバー 上に ユーザーアカウント を持っているユーザーのみが利用できます。

そしてそのユーザーがvnc-serverを利用するには、最初に初期設定 スクリプト "vncserver" を実行します。

まず サブネット 内の適当な クライアント機 から SSHクライアント 構築中のLinuxサーバー ログイン してください SSHクライアントでサーバーに接続する(WBEL3) SSHクライアントでサーバーに接続する(CentOS3) SSHクライアントでサーバーに接続する(WBEL4) SSHクライアントでサーバーに接続する(CentOS4) SSHクライアントでサーバーに接続する(CentOS5)

vnc-serverの初期設定 スクリプト "vncserver" カレント ユーザーに対して実行されますので、必要であればここで su コマンド を使ってvnc-serverの利用を有効にしたいユーザーアカウントに変更します。

それから "vncserver" を実行します。

カレントユーザーに対してvncserverが初めて実行されたときはパスワードの入力を促されますので、ここで適当なパスワードを設定します。

このパスワードは VNC クライアント から接続を行うときに必要なパスワードですから、 カレントユーザーの "web1.obenri.com" へのログインパスワードとは別の物です 。もちろん同じでも構いません。

パスワードが設定されると、即座に Xvnc デーモン が起動します。

[tanaka@web1 ~]$ vncserverEnter
Password: 任意ののパスワードを入力します。 Enter
Verify: もう一度パスワードを入力します。 Enter
xauth: creating new authority file /home/j_nomi/.Xauthority

New 'web1.obenri.com:1 (tanaka)' desktop is web1.obenri.com:1

Creating default startup script /home/tanaka/.vnc/xstartup
Starting applications specified in /home/tanaka/.vnc/xstartup
Log file is /home/tanaka/.vnc/web1.obenri.com:1.log

[tanaka@web1 ~]$ ps ax | grep vncEnter  ←プロセスを確認してみます psコマンドについて
1380 pts/0  S   0:00 Xvnc :1 -desktop web1.obenri.com:1 (tanaka) -httpd /usr/share/vnc/classes -auth /home/tanaka/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /home/tanaka/.vnc/passwd -rfbport 5901 -pn
1385 pts/0  S   0:00 vncconfig -iconic
1419 pts/0  S   0:00 grep vnc
[tanaka@web1 ~]$

初めてvncserverを実行したユーザーアカウントではメッセージにあるようにいくつかの初期設定ファイルが作成されます。

ちなみに、過去に実機上で X-Window を起動したことがあるユーザーアカウントの場合は、既にその時点で .Xauthority が作成されていますので、.Xauthorityを作成したというメッセージは表示されないはずです。

さて、実はもうこの段階でvnc-serverは利用可能になっています。

早速同じサブネットに接続している任意のパソコンから適当なVNCクライアントで接続してみましょう。

VNCクライアントから接続するには、接続の ダイアログ に、

サーバーの IPアドレス または FQDN または ホスト名 : ディスプレイ番号

と入力します。

具体的な値は、 vncserver を実行したときに表示されます(上の 赤字 で示す部分です)ので、通常はそのとおりに "web1.obenri.com:1" と入力すればOKです。

従ってこのケースでは、

RealVNCビュワーで接続
RealVNCビュワーで接続

あるいは、

UltraVNCビュワーで接続
UltraVNCビュワーで接続

のようにダイアログに入力すればOKです。

要するに接続情報の実体は IPアドレス であって、それを指し示すホスト名やFQDNならばそれでもOKです、ということですね。
つまり TCP/IP の一般的な ノード の指定方法と同じ、ということです。

ただしクライアント側で FQDN "web1.obenri.com" が、実際にサーバーに割り当てられている IPアドレス "192.168.100.11" 名前解決 されないようなネットワーク環境の場合は、直接IPアドレスで "192.168.100.11:1" と設定しなければなりません。

また逆に "web1.obenri.com" 以外であっても、 "192.168.100.11" に名前解決されるFQDNやホスト名であれば、例えば "web1:1" のように指定することもできます。

接続先を適切に入力したら OK あるいは 接続 ボタンなどをクリックし、引き続き表示されるパスワード入力ダイアログに先ほど設定したパスワードを入力すると接続が行われます。

このページの先頭へ↑

VNC接続時のデスクトップ環境の設定

ところが現段階では、実際に VNC クライアント から接続してみるとこんな見慣れない画面が現れるはずです。

地味な灰色のデスクトップにそこはかとなく CUI のウインドウがあるだけ...。
何かの間違いでは...と思ってしまいそうな画面ですが、これでも立派な X-Winbdow GUI 画面です。
WindowsOS MacintoshOS では、デスクトップの操作環境は基本的に一種類ずつしかないのでピンとこないかもしれませんが、LinuxOSなどの UNIX OS には非常に多くのデスクトップ環境があって自由に選んで使用することができます。
初期設定でのVNCクライアント画面(twm)
初期設定でのVNCクライアント画面(twm)

「なんだ、これ?。」と思われる方も多いかもしれませんが、この画面は LinuxOS の旧式のデスクトップ環境 "twm" の画面です。

この コンテンツ どおりに WBEL CentOS インストール を行うと、X-Windowのデスクトップ環境として GNOME が普通に利用できるようになっているはずですが WBEL3の標準X-Window画面 CentOS3の標準X-Window画面 WBEL4の標準X-Window画面 CentOS4の標準X-Window画面 CentOS5の標準X-Window画面 vnc-sever では "twm" デフォルト のデスクトップ環境となっているため、こういう貧弱な画面表示になってしまうわけです(もちろんその分非常に高速に動作しますが)。

これではもちろん使い勝手が悪すぎますから、ここは実機で使用するものと同じ GNOME で起動するように設定を変更しましょう。

vncserverで起動するX-Windowのデスクトップ環境は、 ホームディレクトリ 以下の ".vnc/xstartup" に記述されていますので、この内容を書き換えます。

普通はウインドウのクローズボックスでウインドウを閉じればOKです。

まず、いったんパソコンに表示しているVNCクライアントの画面を閉じてください。

次に SSH プロンプト から、

vncserver -kill :[ディスプレイ番号] Enter

を実行して稼働中の Xvnc デーモン を停止します。

[tanaka@web1 ~]$ vncserver -kill :1Enter
Killing Xvnc process ID 1391  ←Xvncの:1のプロセスが停止しました。
[tanaka@web1 ~]$

次に nano エディタでホームディレクトリ以下の ".vnc/xstartup を開きます nanoエディタでファイルを開く

[tanaka@web1 ~]$ nano .vnc/xstartupEnter


nanoで.vnc/xstartupを開く
nanoで".vnc/xstartup"を開く

".vnc/xstartup は、ご覧のとおり初期設定ファイルではなく シェル スクリプト なのですが、後半部分が "twm" を起動するための記述部分です。

vncseverのバージョンによってはここの部分の記述は若干異なることがありますが、後半部分はまとめて無効化し、前半の二行の有効化を行うという方法に変わりはありません。

そこでこの部分の行の先頭に "#" を付けて無効化し、このスクリプト内のコメント文に書かれているとおりに、コメント文以下の二行について先頭の "#" を削除して設定を有効化します。

システム標準のデスクトップで起動するように.vnc/xstartupを修正
システム標準のデスクトップで起動するように".vnc/xstartup"を修正

構築中のLinuxサーバー のシステムが標準で使用するX-Windowのデスクトップ環境(GNOME)は "/etc/X11/xinit/xinitrc" に記述されていますが、このように設定を行うことでXvncを起動するときに "/etc/X11/xinit/xinitrc" の内容が実行されるというわけです。

修正が終わったら ".vnc/xstartup" を保存し、 nano エディタを終了してください nanoエディタでファイルを閉じる

そして再びvncserverを実行します。

二度目以降のXvncの起動の場合、パスワードも設定済みですし必要なファイル類も作られていますのでメッセージはこのように簡単になります。
[tanaka@web1 ~]$ vncserverEnter

New 'web1.obenri.com:1 (tanaka)' desktop is web1.obenri.com:1

Starting applications specified in /home/tanaka/.vnc/xstartup
Log file is /home/tanaka/.vnc/web1.obenri.com:1.log

[tanaka@web1 ~]$

そしてもう一度VNCクライアントから接続してみてください。今度はおなじみのGNOMEのデスクトップが表示されるはずです。

設定修正後のVNCクライアント画面(GNOME)
設定修正後のVNCクライアント画面(GNOME)

以上でvnc-serverの基本的な環境設定は終わりです。

このページの先頭へ↑

vnc-serverの素朴な疑問

既にお気付きの方も多いかもしれませんが、 vnc-server を利用してみるとちょっと不思議に思えることがあると思いますのでここでちょっと整理してみましょう。

1. ユーザーアカウント への ログイン はなぜ不要?。

このページの冒頭で少し触れていますが、 WBEL CentOS に標準で インストール されるvnc-serverでは、 Xauthority という認証機能が デフォルト で有効になっています。

詳しいメカニズムの説明は割愛しますが、Xauthorityは ".vnc/.Xauthority" ファイルに含まれる認証データを参照し、ログイン許可を持つユーザーアカウントの認証データ(平たく言えばパスワード)と連携します。

つまりvnc-serverに接続するパスワードがあれば通常のログインパスワードは不要、というわけです。

ですから、vnc-serverに接続するためのパスワードは通常のログインパスワードと同程度に重要なものといえますから、特に "root" アカウント に対してvnc-serverを設定する場合は安易なパスワードを設定しないように気をつけてください。

2. サーバー機 はランレベル3で稼動しているのに、 X-Window の起動中の画面が見れないのはなぜ?。

WBELやCentOSをランレベル3 ランレベルについて 、すなわち CUI モードで稼働中の場合、 "startx" コマンド でX-Windowを起動すると、サービスの読み込みの内容などを表示する スタートアップ画面 がしばらくの間表示されます。

しかし VNC クライアント から接続するときは、そのスタートアップ画面をみることは通常ありません。

なぜでしょうか。

実は プロンプト から "vncserver" を実行すると、単に画面上にデスクトップを表示していないというだけでサーバー内部では "startx"コマンドの実行と同じ動作を開始する ことになります。

ですから、vncserverを起動してから大急ぎでVNCクライアントから接続を行うと、ちょっとだけスタートアップ画面を見ることができたりします。

一般的なVNCの利用では、vncserverを実行してからVNCクライアントを起動し、それから接続操作を行う、という手順になりますが、実はこういった操作をしている間にも着々とX-Windowの起動 プロセス は進行していて、接続が完了する頃には既にデスクトップの起動が終わっている、ということになるわけです。

これがVNC接続ではX-Windowのスタートアップ画面を見ることができない理由です。

ということはvnc-serverを利用する場合、VNCクライアントからの接続を行っていなくても、X-Windowを起動する分の メモリ は消費されていますし、それなりの動作負荷も発生していることになります( top コマンドなどで状況を確認することができます。 )。

ホスト機 の性能に余裕がある場合はともかくとして、vnc-serverを利用していないときはできるだけvncserverの実行は控え、不要になった Xvnc デーモン

vncserver -kill :[ディスプレイ番号] Enter

でこまめに終了させるよう心掛けましょう。

3.VNCクライアントからの接続中に通信が切れたらどうなる?。

VNCのサーバーとクライアントの関係は、「クライアントは、サーバー上で動作しているデスクトップ環境を見ながら、サーバーに対して操作指示を送っている。」というイメージになります。

つまり、「クライアント側で何かの処理を行い、その結果をサーバーに送る。」といったややこしい関係ではありませんから、VNCを使って作業している途中で通信が途絶えたとき、イメージとしては、 「実機を操作中に両手をバンザイして目をつぶった。」 ことと同じ状態と考えて構わないでしょう。

従ってVNCを利用中に通信が切れても、サーバーは「次の操作指示待ち」で待機していますから、通信が復帰したあとに再度VNCクライアントから接続を行えば、通信が切れたときのデスクトップの状態から操作を続行できるようになります。

このページの先頭へ↑

ディスプレイ番号とポート番号の関係について

vnc-server は同時に複数の Xvnc デーモン を起動し、複数の VNC クライアント からの接続を受けることができるようになっています。

試しに ユーザーアカウント "tanaka" "nakai" でそれぞれvncserverを起動してみましょう。

[tanaka@web1 ~]$ vncserverEnter

New 'web1.obenri.com:1 (tanaka)' desktop is web1.obenri.com:1

Starting applications specified in /home/tanaka/.vnc/xstartup
Log file is /home/tanaka/.vnc/web1.obenri.com:1.log

[tanaka@web1 ~]$ su - nakaiEnter
Password:  "nakai"のログインパスワードを入力 Enter
[nakai@web1 ~]$ vncserverEnter

New 'web1.obenri.com:2 (nakai)' desktop is web1.obenri.com:2

Starting applications specified in /home/nakai/.vnc/xstartup
Log file is /home/nakai/.vnc/web1.obenri.com:2.log

[nakai@web1 ~]$

このようにひとつの ホスト 上で複数のXvncを起動すると、起動した順に ディスプレイ番号 ( 赤字 の末尾の数字)が1から順に割り当てられます。

従って "tanaka" がVNCクライアントから接続するときは "web1.obenri.com:1" "nakai" が接続するときは "web1.obenri.com:2" を指定することになります。

この ディスプレイ番号 はただの識別番号ということではなく、実は ポート番号 を意味します。

といってもポート番号1番、2番というわけではなく、実際にはポート番号 "5901番" "5902番" を表す点に注意してください。

WebブラウザをVNCクライアントとして使用する の説明のとおり、 JAVA を利用して Webブラウザ をクライアントとして用いる HTTP /JAVAモード としては 5800番 が使われます。

一般的なVNC接続では VNC利用でのファイヤーウォールの設定について で説明したとおり、VNCの Well-Knownポート である 5900番 とそこからの連番を使用することになっています。

そのため通常はVNC サーバー 側もVNCクライアント側もこの5900番が デフォルト として扱われるようになっていますから、操作のうえでは上の二桁を省略して ":1" ":2" で利用できるように簡略化されているわけです。

従ってVNCサーバーやVNCクライアントに関する設定では ":1" ":2" という表記が使われますが、他の アプリケーション が連携したり、 ルーター ポートフォワーディング の設定を行う場合には、

ポート番号=5900+ディスプレイ番号

として設定しなければならない点に注意してください。

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。