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
■ 特定のユーザでデーモン化する
この方法は分からなかった。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が参考になる。