前の記事で作業したとおり、さくらのVPSでUbuntu Linuxの環境を構築して、imotenを動かすことができました。
でもひとつの目的を達成して、なおリソースに余裕があることを知ると、もっと他のことができるんじゃないかと考えてしまいます。 ということで、デスクトップ環境をVPS上に構築し、MacOSXをクライアント、さくらのVPS上のUbuntu LinuxをサーバとするVNC環境を構築してみることにします。
サーバ側Ubuntu Linux 10.04の準備
参考URL kreis::Ubuntu 10.04LTD(VNC) http://kreis.usamimi.info/blog/index.php?e=90&PHPSESSID=1ea22ffa6bd3958244eaff0ce18a9ae9
あちこちで、UbuntuでVNCを試されている記事に出会ったのですが、上記の記事のやりかたでないとうまくいきませんでした。/etc/xinetd.d/xvnc の記述で「flags = REUSE NODELAY」が入ることがポイントのようです。
Desktop環境のインストール
インストールしたのがサーバ版ということで、ひとまずデフォルトのGnomeが起動できるようにインストールを行います。 Ubuntuの日本語環境 | Ubuntu Japanese Teamを参考に
- 日本語環境のレポジトリ追加
- デスクトップ環境のインストール
の順番で作業します。
$ wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add - $ wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add - $ sudo wget https://www.ubuntulinux.jp/sources.list.d/lucid.list -O /etc/apt/sources.list.d/ubuntu-ja.list $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install ubuntu-desktop-ja
VNCとxinetdのインストールとgdmの設定
$ sudo apt-get install xinetd vnc4server $ sudo vncpasswd /etc/passwd_vnc Password: Verify: $ sudo chown nobody.tty /etc/passwd_vnc
ここで入力したパスワードがクライアントからのログイン時に必要になります。
viなどで以下のファイルを編集します。
/etc/xinetd.d/xvnc (新規作成)
service xvnc { disable = no socket_type = stream wait = no user = nobody group = tty server = /usr/bin/Xvnc server_args = -inetd -query localhost -geometry 1440x900 -depth 24 -once -DisconnectClients=0 -NeverShared -passwordFile=/etc/passwd_vnc -fp /usr/share/fonts/X11/misc,/usr/share/fonts/X11/100dpi /:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/ 100dpi,/usr/share/fonts/X11/75dpi,/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType flags = REUSE NODELAY port = 5901 }
-geometryの後が解像度になります。 -passwordfileは先程vncpasswdで作成したのと同じファイル名 port番号は次に編集する /etc/services と番号を合わせましょう。 5900番が:0、5901番が:1…という具合になります。
/etc/services (編集)
ファイルの最後に
xvnc 5901/tcp # VNC server
と追加しましょう。/etc/servicesのxvncがサービス名となります。
/etc/gdm/gdm.schemas (編集)
以下2箇所を変更してください。
- security/DisallowTCP→trueからfalse
- xdmcp/Enable→falseからtrue
/etc/gdm/custom.conf (新規作成)
[daemon] RemoteGreeter=/usr/lib/gdm/gdm-simple-greeter [security] DisallowTCP=false AllowRemoteRoot=false [xdmcp] Enable=true DisplaysPerHost=2 [gui] [greeter] [chooser] [debug] [servers]
最後にxinetdとgdmの再起動をかけます。
$ sudo /etc/init.d/xinetd restart $ sudo /etc/init.d/gdm restart
netstatコマンドでListenしているかどうかを確認します。
$ netstat -a | grep vnc tcp 0 0 *:xvnc *:* LISTEN
xvncでLISTENになっていることを確認しました。これでサーバ側の準備OK。
クライアント側 Mac OS X
まず、クライアントソフトをなににするかですが、フリーのVNCクライアントでヒットしたのがChicken of the VNCだったのでこちらを使います。
Chicken of the VNC | Download Chicken of the VNC software for free at SourceForge.net http://sourceforge.net/projects/cotvnc/
- Host: → サーバのIPアドレスを入力
- Display: → サーバのポート番号から5900を引いた値(今回は1)
- Password: → vncpasswdで設定したパスワード
これでログイン画面が表示されれば成功です。
トンネリングでVNC
しかしこのままですと、画面の通信がネット上を流れることになります。 セキュリティ的にちょっと心配…というわけでSSHトンネリングで通信を暗号化したいと思います。
MacPortsでSSHのパッケージがインストールされている前提です。
$ ssh -l USER -L 5901:localhost:5901 SERVER_IP
USERはUbuntu上の自分のユーザ名、SERVER_IPはサーバのIPアドレス(59.x.x.x)は適宜読みかえてください。
そしてChicken of the VNCの設定はこうなります。
すると、
- Chicken of the VNCはlocalhostの5901番にアクセス
- その通信は暗号化されてサーバのSSH(通常22番ポート)に転送
- さらにそこからサーバの5901番ポートにアクセス
- そこではVNCのサービスが起動している
という流れで、めでたくデスクトップ画面が表示されます。