VNC で Linux サーバにログインする

2006/10/28 更新

VNC で Linux サーバにログインすると、グラフィクス・ユーザ・インターフェイスを用いてサーバを操作できます。つまり、マウスを使ってサーバを操作できます。
このページでは、vncserver が既にディストリビューションごとの方法でインストールされているものとして、運用方法を述べたいと思います。

VNC サーバ (vncserver) の運用法は3つあります。
一つ目はコンソールや ssh からログイン後、手動で vncserver を起動する方法です。
二つ目は起動スクリプト /etc/rc.d/init.d/vncserver を使う方法です。
三つ目はスーパ・サーバ inetd を用いる方法です。 三つ目の方法は X サーバを用いてリモートにログインする時と同じような感覚で使用できます。

vncserver の運用法 (その一)

コンソールや ssh からログイン後、手動で vncserver を起動する方法です。
コンソールや ssh から一般ユーザでログインした後 vncserver を実行します。

$ vncserver

始めて vncserver を実行するときは下記のようにパスワードを求められます。 パスワードを入力すると、初期設定がなされます。

You will require a password to access your desktops.

Password:
Verify:
xauth:  creating new authority file /home/test/.Xauthority

New 'your.host.domain:1 (test)' desktop is your.host.domain:1

Creating default startup script /home/test/.vnc/xstartup
Starting applications specified in /home/test/.vnc/xstartup
Log file is /home/test/.vnc/your.host.domain:1.log

上記の出力を見ると、今回起動した vncserver が提供するデスクトップは、ディスプレイ番号1が割り当てられているようです。 vncserver が起動した後は、コンソールや ssh からはログアウトしても構いません。

クライアントからサーバとして ホスト名:ディスプレイ番号 (この例の場合は your.host.domain:1) を指定してアクセスします。すると、少し寂しいデスクトップが現れます。

クライアントが接続を切っても、デスクトップからログアウトしても vncserver は終了しません。 終了させるにはコンソールや ssh からログインし次のコマンドを実行します。

$ vncserver -kill :1

初期設定ではデスクトップが寂しいです。 gnome や kde など普段使っているデスクトップを利用する場合、 ~/.vnc/xstartup を次のように記述します。

#!/bin/sh
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

Vine Linux 3.2 の場合、 emacs を起動したときにフォント関連のエラーがでます。 原因は、 VNC がフォント・サーバ (xfs) を使用するように設定されていないことであるようです。 そこで、 ~/.vnc/xstartup にフォント・パスに xfs を追加する行を追加します。

#!/bin/sh
xset +fp unix/:7100
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

上記のように ~/.vnc/xstartup を修正し、 vncserver を起動した上で、 vncviewr でログインすると、見慣れたデスクトップが現れます。

VNC ではサーバーからクライアントへ音声を転送することはできません。
また、 Vine Linux 3.2 の場合は、サーバの本体に取り付けられているスピーカーから音を出すこともできません。なぜなら、音を出す際にアクセスするデバイス・ファイルである /dev/dsp や /dev/mixer は root が所有しており、 root しかアクセス権限が無いためです。なお、コンソールからログインした場合は音を出すことができますが、それは pam パッケージに含まれるプログラムが、デバイス・ファイルの所有者をログインした人に変更するからです。リモートからログインした場合は、所有者の変更は行われないので、音を出すことができません。

vncserver の運用法 (そのニ)

起動スクリプト /etc/rc.d/init.d/vncserver を使う方法です。
起動スクリプトは、本家が配布しているパッケージには含まれていないようです。
ディストリビューションのパッケージに起動スクリプトが含まれている場合に使えます。
以下は Vine Linux 3.2 の場合です。

この運用法は、「vncserver の運用法 (その一)」で紹介した方法の vncserver の起動部分を自動化したようなものです。
「vncserver の運用法 (その一)」で設定を行い vncserver の起動が確認した上で、この運用法を試すのが良いと思います。
なお、複数のユーザが利用する場合は、ユーザの数だけ vncserver が起動します。

起動スクリプトは、 /etc/sysconfig/vncservers を見て vncserver を起動します。
user1 というユーザが利用するために、ディスプレイ番号 1 の vncserver を起動する場合、/etc/sysconfig/vncservers に以下の内容を記述します。編集は root ユーザで行います。

VNCSERVERS="1:user1"
VNCSERVERARGS[1]="-geometry 800x600"

vncserver を起動するには、root ユーザで以下のコマンドを実行します。

# /etc/rc.d/init.d/vncserver start

以下のようなものが出力されれば起動に成功です。

VNC serverを起動中: 1:user1                                 [  OK  ]

vncserver を停止するには、root ユーザで以下のコマンドを実行します。

# /etc/rc.d/init.d/vncserver stop

以下のようなものが出力されれば停止されたことを示しています。

VNC serverを停止中: 1:yuta                                 [  OK  ]

計算機の起動時に、 vncserver を起動するように設定するときは次のようにします。

# /sbin/chkconfig vncserver on

計算機の起動時に、 vncserver を起動しないように設定するときは次のようにします。

# /sbin/chkconfig vncserver off

vncserver の運用法 (その三)

スーパ・サーバ inetd を用いる方法です。 vncserver パッケージに含まれる Xvnc プログラムを inetd から呼び出します。 X サーバを用いてリモートにログインする時と似たような使用感が得られます。

この運用法の場合、ユーザ認証に XDMCP を用います。
よって、xdm または gdm が起動していて(つまりラン・レベルが 5)であり、 XDMCP によるログインを許可していなくてはなりません。

gdm の場合、XDMCP を許可するには、/etc/X11/gdm/gdm.conf を編集し、[xdmcp] セクションの Enable=false を Enable=true に書き換えます。

書き換えた後は、一旦、ラン・レベルを 3 にした後、ラン・レベルを 5 に戻します。

# /sbin/telinit 3
# /sbin/telinit 5

次に /etc/inetd.conf に次の行を追加します。
"-fp unix/:7100" というオプションは、フォントの表示にフォント・サーバを使用するという意味です。 Xvnc のデフォルトの設定では日本語の表示に必要なフォントの一部がフォント・パスに含まれていないようで、 emacs を起動しようとするとエラーが出ます。 Vine Linux 3.2 ではフォント・サーバが動作しているので、 Xvnc にフォント・サーバを使わせれば、日本語の表示が問題無くできるようになります。

5901 stream tcp nowait nobody /usr/bin/Xvnc Xvnc -inetd -query localhost -once securitytypes=none -fp unix/:7100

inetd に HUP シグナルを送り、/etc/inetd.conf を再読み込みさせます。

# ps -C inetd
  PID TTY          TIME CMD
  792 ?        00:00:00 inetd
# kill -HUP 792

上記の手順を行うと、 VNC クライアントから your.host.domain:1 にアクセスすると、下図のようなグラフィカル・ログイン画面が現れます。 ここで、 your.host.domain:1 の 1 は、/etc/inetd.conf で指定したポート番号から 5900 を引いた値です。
ユーザ名とパスワードを入力してログインすると、コンソールからログインしたときと同じようなデスクトップが現れます。

なお、クライアントからサーバへの接続を切断すると、セッションがその場で終了してしまいます。
接続し直しても元の画面には戻れません。


Copyright (C) 2005-2006 Nabe, All right reserved.