UbuntuにVNCサーバを設定する

Ubuntuの場合はFedoraと大体同じだが、幾つか設定するファイル名が異なったり、(私の使ったUbuntu 8.04+vnc4serverでは)マニュアルない引数を指定するなどのポイントがあった。

  • vinoを使う
  • 手動でVNCサーバを起動する
  • 特定のユーザでデーモン化する
  • XDMを使ったログイン画面を提供する

vinoを使う

Fedoraの設定と同じ。ただし、Ubuntuは標準でファイヤーウォール管理ソフトが無く、ポート開放の設定なしで接続できる。(ファイヤーウォール管理ソフトは幾つかあるが"Firestarter"というのが人気(Popularity)が高いようだ。)

vinoを使わない場合は、別途vncserverをインストールし、目的に合わせて設定する必要がある。
まず、VNCサーバのソフトウェアをインストールする。

adsaria@ubuntu804:~$ sudo apt-get install vnc4server
[sudo] password for adsaria:
	:
adsaria@ubuntu804:~$ 

Ubuntu 8.04では"vnc4server"の他に"tightvncserver"というパッケージもある。

手動でVNCサーバを起動する

vnc4serverをインストールしたらvncpasswdコマンドでパスワードを設定してvncserverを起動するが、いきなりvncserverを起動した場合、パスワードの設定から入る。

adsaria@ubuntu804:~$ vncserver

You will require a password to access your desktops.

Password:
Verify:

New 'ubuntu804:1 (adsaria)' desktop is ubuntu804:1

Creating default startup script /home/adsaria/.vnc/xstartup
Starting applications specified in /home/adsaria/.vnc/xstartup
Log file is /home/adsaria/.vnc/ubuntu804:1.log

adsaria@ubuntu804:~$

上記の例では":1"というディスプレ(Xサーバ)を使ってVNCが起動したことを示している。なお、"vncserver"は間接的に"vnc4server"へシンボリックリンクされている。
この状態でVNCクライアントから接続できるようになるが、ウィンドウマネージャがtwmなので使いづらい。一旦、vncserverを終了して ~/.vnc/xstartup を修正する。

adsaria@ubuntu804:~$ vncserver -kill :1
Killing Xvnc process ID 5613

adsaria@ubuntu804:~$ vi /home/adsaria/.vnc/xstartup

~/.vnc/xstartupの内容は以下の通り。(はてなの“キーワード自動リンク機能”でキーワードが赤字にならないため、まだら模様になってしまっている。自動リンクは構わないが、文字の色を勝手変えるのはなんとかして欲しい....。)

#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
/bin/sh /etc/X11/xinit/xinitrc
exit $?

[ -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 &

ここで、Fadora 8とは異なりUbuntu 8.04では単なるコメントアウトではなく工夫が必要となる。Ubuntuでは /etc/X11/xinit/xinitrcの実行権がないのでexecではなく/bin/shスクリプトを読み込んで実行する形となることに注意。

Fedora 8の場合
 [adsaria@fedora8 ~]$ ls -l /etc/X11/xinit/xinitrc
 -rwxr-xr-x 1 root root 1512 2007-10-13 04:13 /etc/X11/xinit/xinitrc
 [adsaria@fedora8 ~]$

■ Ubuntu 8.04の場合
 adsaria@ubuntu804:~$ ls -l /etc/X11/xinit/xinitrc
 -rw-r--r-- 1 root root 226 2008-02-02 13:14 /etc/X11/xinit/xinitrc
 adsaria@ubuntu804:~$

これで、VNCを使ってGNOME等でログインできる。ただしUbuntu 8.04の環境ではVNCクライアントからアクセスするとGNOMEの設定が正しく行なわれなかったというメッセージが何回か出てくる。また、"gnome-settings-daemon"が起動できないというメッセージも出る。このために幾つかウィンドウが見た目、GNOMEではなくX風になってしまう。

どうもgnome-settings-daemonのバグらしい。ログイン時のsyslogなどを見ると次のようなメッセージが残っている。

May 24 23:48:36 ubuntu804 kernel: [ 4215.148383] gnome-settings-[18457]: segfault at 10 rip 7fa00c90673d rsp 7fff2165ee10 error 4
May 24 23:48:40 ubuntu804 kernel: [ 4219.395703] gnome-settings-[20350]: segfault at 10 rip 7f321105e73d rsp 7fff25db7540 error 4
May 24 23:48:44 ubuntu804 kernel: [ 4223.445133] gnome-settings-[21881]: segfault at 10 rip 7f9833e4b73d rsp 7fff48ba2330 error 4
May 24 23:48:49 ubuntu804 kernel: [ 4228.366838] gnome-settings-[23215]: segfault at 10 rip 7f8a1746373d rsp 7fff2c1b9940 error 4
May 24 23:48:53 ubuntu804 kernel: [ 4232.354847] gnome-settings-[24861]: segfault at 10 rip 7fa9b9f8173d rsp 7fffcecd8460 error 4
May 24 23:48:57 ubuntu804 kernel: [ 4236.304383] gnome-settings-[26128]: segfault at 10 rip 7fce3fe9273d rsp 7fff54be9370 error 4
May 24 23:49:01 ubuntu804 kernel: [ 4240.313891] gnome-settings-[27423]: segfault at 10 rip 7ff26a13173d rsp 7fff7ee88610 error 4
May 24 23:49:05 ubuntu804 kernel: [ 4244.301465] gnome-settings-[28806]: segfault at 10 rip 7f51f8fa573d rsp 7fff0dcfe480 error 4

原因はgnome-settings-daemonのバグとしても、何とか回避策はないものか。

特定のユーザでデーモン化する

この方法は分からなかった。Ubuntuに不慣れなので、vncserverをサービスとして設定する方法が分からなかった。([System]⇒[Administration]⇒[Services]に"vncserver"の項目がないし、Redhat系のchkconfigにあたるコマンドも見つからなかった。/etc/initd.dにも"vnc"という文字列を含んだスクリプトは無いので、Ubuntu環境ではこの方法は使えないのかと思う。)
しかし、次のxinetdを利用する方法が使えれば、この方法は実用上もあまり使わないので構わないだろう。というか、次のような観点からxinetdを使った方法の方が良いと思う。

  • xinetdでログイン画面を利用するようにすれば、Xvncのパスワードの他にLinuxのパスワードと2重の認証が必要であり、セキュリティが向上する。特にインターネット経由で利用する際は、こちらの方がいいだろう。
  • 実際にクライアントからアクセスがあるまではXvncプロセスは起動されないので、システムのリソースが無駄にならない。(と言っても些細だが。)

XDMを使ったログイン画面を提供する

先ずは、xinetdをインストールする。

adsaria@ubuntu804:~$ sudo apt-get install xinetd
Reading package lists... Done
	:
Setting up xinetd (1:2.3.14-5) ...
 * Stopping internet superserver xinetd                            [ OK ]
 * Starting internet superserver xinetd                            [ OK ]

adsaria@ubuntu804:~$

/etc/xinetd.d/Xvncを設定する。ここで Xvncに対してマニュアルに出ていない "-extension XFIXES"というオプションを指定しなければならなかった。

service xvnc1
{
	disable		= no
	socket_type	= stream
	wait		= no
	user		= nobody
	group		= tty
	server		= /usr/bin/Xvnc
	server_args	= -inetd -geometry 1152x864 -depth 16 -query localhost -once PasswordFile=/etc/passwd_vnc -extension XFIXES
}

service xvnc2
{
	disable		= no
	socket_type	= stream
	wait		= no
	user		= nobody
	group		= tty
	server		= /usr/bin/Xvnc
	server_args	= -inetd -geometry 800x600 -depth 16 -query localhost -once PasswordFile=/etc/passwd_vnc -extension XFIXES
}

/etc/servicesを設定する。(Fedoraと同様)

vino		5900/tcp			# VNC Server vino
xvnc1		5901/tcp			# VNC Server 1
xvnc2		5902/tcp			# VNC Server 2

VNCアクセス用のパスワードを設定する。(Fedoraと同様)
パスワードを保存するファイル上の/etc/xinetd.d/Xvncで指定したファイル(ファイルのパス・名前は任意)と同じ。また、ファイルの所有者/グループをの/etc/xinetd.d/Xvncで指定したプロセスの所有者/グループと一致させておく。

 adsaria@ubuntu804:~$ sudo vncpasswd /etc/passwd_vnc
 [sudo] password for adsaria:
 Password:
 Verify:
 adsaria@ubuntu804:~$ ls -l /etc/passwd_vnc
 -rw------- 1 root root 8 2008-05-24 20:04 /etc/passwd_vnc
 adsaria@ubuntu804:~$ sudo chown nobody:tty /etc/passwd_vnc
 adsaria@ubuntu804:~$ ls -l /etc/passwd_vnc
 -rw------- 1 nobody tty 8 2008-05-24 20:04 /etc/passwd_vnc
 adsaria@ubuntu804:~$

最後にLogin Window Preferenceで遠隔からのログインを可能とする。(Fedoraと同様。但し、私の環境ではLogin Window Preferenceウィンドウが出てくるまで1分以上かかった。)基本的には"Remote"タブでリモートからのアクセスを許すように設定するだけ。


コマンドラインから設定する場合は /etc/gdm/gdm.conf-customファイルの"[xdmcp]"の項目に"Enable=true"を追加する。

root@ubuntu804:~# vi /etc/gdm/gdm.conf-custom
	:
[xdmcp]
Enable=true

これでVNCクライアントからアクセスできるが、やはりGNOMEの設定が正しくできないという趣旨のメッセージが出てしまう。

UbuntuでのVNCの設定はHOWTO: Remote Desktop with VNC in Ubuntu Edgy/Feistyが参考になる。