ヘッドレスな仮想サーバ上で VNC デスクトップ環境を動かす

これまで我が家の MicroServer はメモリ 1GB で頑張ってきましたが、OpenVZ のコンテナをたくさん動かしていたらさすがに苦しくなってきたので、amazon.co.jp から CFD 販売の DIMM 4GB × 2 を買って 8GB にしてしまいました。

メモリに一気に余裕ができたので、次は MicroServer で KVM なども試してみようかと思います。CPU が非力なのであまり期待はしていませんが。

さて今回の記事では、我が家の OpenVZ コンテナで稼動している VNC デスクトップ環境について紹介します。

VNC デスクトップ環境

OpenVZ には仮想グラフィックデバイスがないため、いわゆるヘッドレスなサーバとして運用するのが一般的ですが、実際には X サーバさえどこかに用意できれば、GNOME などのデスクトップ環境を OpenVZ コンテナでも動かすことができます。

この場合、コンテナでは GDM などのディスプレイマネージャを動かしておき、X サーバ (X11.appXming など) は手元の端末マシンで動かして XDMCP で接続するといった方法が一般的ですが、最近我が家では VNC つきの X サーバ (Xvnc) を GDM と同じコンテナで動かし、それに対して端末マシンから VNC クライアントで接続する方法を使っています。

端末マシンで X サーバを動かす場合、端末マシンやネットワーク接続が落ちるとログインセッションが失なわれてしまうのが欠点ですが、Xvnc を使う方法であれば、コンテナで X サーバが永続的に動き続けていますのでそのような事態であってもセッションを失うことを避けられます。screen の detach/resume に似ていますね。

私はこの Xvnc 上の GNOME デスクトップを、icedove (Thunderbird) を立ち上げっぱなしにして、IMAP のメールアカウントに届いたメールの spam 判定をしたり振り分けをしたりするのに利用しています。手元の端末マシンが変わっても、コンテナで動くひとつのアプリケーションのみをいじればよいので、メール管理がシンプルになりました。

Xvnc セットアップ

以下は Debian squeeze で Xvnc による GNOME デスクトップ環境を作る手順です。まずは最低限の GNOME デスクトップ環境のパッケージをインストールします。

yaegashi@ve143:~$ sudo apt-get install desktop-base gnome-core

Xvnc は TightVNC のものがよいと思います。Debian では tightvncserver というパッケージに入っています。X サーバを動かすためのツールやフォントなど最低限のパッケージも入れます。

yaegashi@ve143:~$ sudo apt-get install tightvncserver
yaegashi@ve143:~$ sudo apt-get install x11-xserver-utils xfonts-base ttf-vlgothic

Xvnc セッション

tightvncserver に付属する vncserver コマンドを使うと、簡単にユーザ権限の Xvnc サーバのセッションを開始できます。

まずは vncpasswd コマンドで VNC 接続用のパスワードを設定します。view-only パスワードというものも設定できます。

yaegashi@ve143:~$ vncpasswd
Using password file /home/yaegashi/.vnc/passwd
VNC directory /home/yaegashi/.vnc does not exist, creating.
Password: 
Verify:   
Would you like to enter a view-only password (y/n)? y
Password: 
Verify:   

次に vncserver コマンドで Xvnc セッションを開始します。 :0VNC のディスプレイ番号、 -geometry はデスクトップの大きさ、 -depth は色数を指定します。これらのオプションはなくても起動しますが、 -depth に関しては VNC クライアントによって色がおかしくなる場合があるので明示的に指定したほうがいいようです。その他のオプションについては man Xvnc して調べてください。

yaegashi@ve143:~$ vncserver :0 -geometry 1024x600 -depth 16
xauth:  creating new authority file /home/yaegashi/.Xauthority

New 'X' desktop is ve143:0

Creating default startup script /home/yaegashi/.vnc/xstartup
Starting applications specified in /home/yaegashi/.vnc/xstartup
Log file is /home/yaegashi/.vnc/ve143:0.log

こうしておいて、適当な VNC クライアントで Xvnc サーバ (この例では ve143 の :0) に接続すれば、次のような GNOME デスクトップの画面が出てくるはずです。

起動した Xvnc サーバは次のようにすれば止められます。

yaegashi@ve143:~$ vncserver -kill :0

vncserver による Xvnc セッションのスタートアップスクリプトは ~/.vnc/xstartup にデフォルトのものが書かれますので、セッションをカスタマイズしたいときはそれをいじります。

yaegashi@ve143:~$ cat .vnc/xstartup 
#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

たとえば日本語のデスクトップにしたいのなら #!/bin/sh のあとに次のように書いておけばいいでしょう。

export LANG=ja_JP.UTF-8

この場合は locales パッケージをインストールして、 dpkg-reconfigure localesja_JP.UTF-8 ロケールを生成しておくことを忘れないでください。

GDM ログイン

VNCGDM からログインしたい場合はまず gdm パッケージをインストールします。

yaegashi@ve143:~$ sudo apt-get install gdm

次に root の VNC パスワードを設定します。これで /root/.vnc/passwd にパスワードファイルができます。

yaegashi@ve143:~$ sudo vncpasswd

/etc/gdm/gdm.conf を次のように編集します。つまり [servers] セクションに 0=VNC を追加し、 [server-VNC] セクションを書き加えます。

[servers]
0=VNC

[server-VNC]
name=VNC server
command=/usr/bin/Xvnc -depth 16 -geometry 1024x600 -rfbauth /root/.vnc/passwd

最後に GDM を再起動します。

yaegashi@ve143:~$ sudo /etc/init.d/gdm restart

これで VNC サーバに接続すれば GDM のログイン画面が現れるはずです。

2010/12/13 02:14:00 JST