ヘッドレスな仮想サーバ上で 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.app や Xming など) は手元の端末マシンで動かして 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 セッションを開始します。 :0
は VNC のディスプレイ番号、 -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 locales
で ja_JP.UTF-8
ロケールを生成しておくことを忘れないでください。
GDM ログイン
VNC で GDM からログインしたい場合はまず 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