CentOS5.2にVNCサーバ環境を構築した。

                                                                                                                      • -

09/09/13 書き直しました。
CentOS5.3にVNCでアクセスできるようにした。 - rderaログ

                                                                                                                      • -

yumで必要なパッケージをインストール

[root]# yum list installed | grep vnc
vnc-server.x86_64                        4.1.2-9.el5            installed       

vnc-serverはもう既にインストールされているので、インストールする必要はない。

/etc/sysconfig/vncserversを編集する。

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

これを以下のように編集する。

VNCSERVERS="1:admin"
VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp -nohttpd"

VNCパスワードを設定する

さきほど登録したユーザadminのパスワードを設定する。

[admin]$ vncpasswd
Password:
Verify:

~admin/.vnc/xstartupを編集する

ユーザadminでVNC関連のファイルを編集する。

[admin]# vi ~/.vnc/xstartup

以下の部分

xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

を以下のように変更する。

# xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &

VNCサーバを起動する

[root]# /etc/rc.d/init.d/vncserver start

起動の自動化

以下のコマンドを実行することにより、OSを再起動時に
VNCサーバが自動的に起動する。

[root]# chkconfig vncserver on 


これでVNCサーバの構築は終了した。
次に、クライアント側からVNCサーバにアクセスする。


VNCクライアントのOSはMacOSX
VNCサーバに接続するVNCサーバソフトはChicken of the VNC

必要事項入力

Passwordにはvncpasswdコマンドで指定したものを入力する。

成功


ユーザadminでログインした。


接続要求があったときだけVNCサーバを起動

上で述べたように以下のコマンドを実行することにより、VNCサーバが
マシン起動時に自動的に起動するようになる。

[root]# chkconfig vncserver on

でも、VNCを使わないときでもVNCサーバが起動している状態が続いていて、無駄である。


よって、VNCサーバへの接続が要求されたときにVNCサーバが起動するように設定する。それには、xinetdを使う。手順を以下に示す。

xinetdをインストール

[root]# yum install xinetd

/etc/servicesを編集する

[root]# vi /etc/services 

以下の記述を追記する。

vnc		5900/tcp			# VNC Server

/etc/xinetd.d/下に起動ファイルを作る

/etc/xinetd.d/下にvncという起動ファイルを作る

[root]# vi /etc/xinetd.d/vnc 

以下を記述する。

service vnc
{
	socket_type	= stream
	wait		= no
	user		= nobody
	server		= /usr/bin/Xvnc
        server_args	= -inetd -query 192.168.1.3 -once -geometry 800x600 -depth 16 --PasswordFile=/etc/vnc_password
	log_on_failure  += USERID
	disable		= no
}

server_argsの指定は以下を参考にした。
WindowsでLinuxをリモート操作(後編) (2/2):ゼロ円でできるXサーバ(2) - @IT

-inetd Xvncをinetd経由で起動させる(必須)
-query ホスト XDMCP(X Display Manager Control Protocol)を使ってユーザー認証を行う指定。「ホスト」は、VNCサーバが動作するマシンの指定
-once xsessionが終了した時点でVNCサーバを終了
-geometry サイズ デスクトップのサイズ
-depth 色数 色数の指定

また、パスワードファイルとして/etc/vnc_passwordを指定しているが、
これは以下のコマンドで指定する。

[root]# vncpasswd /etc/vnc_password
[root]# chmod 644 /etc/vnc_password

ここで設定したパスワードをVNCサーバに接続する時に、入力する。


パスワード入力をしないでVNCサーバに接続するには、
/etc/xinetd.d/vncのserver_argsという項目の

--PasswordFile=/etc/vnc_password

を、以下に変更する。

-SecurityTypes None

XDMCPを許可する

リモートからでも、グラフィカルログインできるように
XDMCP を許可する。

CentOS5.2では/etc/gdm/custom.conf
他の環境でも/etc/X11/gdm/gdm.confかもしれません。

[root]# vi /etc/gdm/custom.conf

以下の記述をする。

[xdmcp]
Enable=true

xinetdの起動

[root]# /etc/rc.d/init.d/xinetd start

これで、VNCサーバへの接続要求があると、VNCが自動的に起動するようになる。

xinetdが自動起動するように設定する

[root]# chkconfig xinetd on

確認


この方法では任意のユーザにログインできる。


ちょっとした応用

/etc/servicesに以下の記述をする。
vnc0		5900/tcp		# VNC Server 1024x768
vnc1		5901/tcp		# VNC Server 800x600
/etc/xinetd.d/配下にファイルを作成

/etc/xinetd.d/vnc0というファイルを作る。
画面サイズを1024x768に指定する。

service vnc0
{
	socket_type	= stream
	wait		= no
	user		= nobody
	server		= /usr/bin/Xvnc
	server_args	= -inetd -query localhost -once -geometry 1024x768 -depth 16 -SecurityTypes None
	log_on_failure  += USERID
	disable		= no
}


/etc/xinetd.d/vnc0というファイルを作る。
画面サイズを800x600に指定する。

service vnc1
{
	socket_type	= stream
	wait		= no
	user		= nobody
	server		= /usr/bin/Xvnc
	server_args	= -inetd -query localhost -once -geometry 800x600 -depth 16 -SecurityTypes None
	log_on_failure  += USERID
	disable		= no
}

これにより画面サイズの違うVNCサーバにアクセスすることができる。