VNC 導入覚書(後編) - もっと手軽に [FreeBSD]
このエントリーは、前編を読んだことを前提としてあります。
もっと手軽に
さて、ここまでは普通の使い方です。SSH などでログインしてサーバーを起動し、ビューアでログインして作業してログアウトして SSH でサーバーを終了。ちょっと面倒です。コンソールで十分な作業だったら、SSH でログインしたまましたほうがマシです。
SSH と同じ手軽さで出来ないものでしょうか。
そう考えた人はほかにもいました。André Moreira さんです。彼は、inetd から Xvnc(VNC サーバーの本体。vncserver は補助用の Perl スクリプトです)を起動できるようにする iXvnc patch for VNC X-Server を公開しました。これによって、わざわざサーバーを起動してからビューアでログインという手間をかけなくて済むようになったわけです。
なお、Xvnc 3.3.3r3 でこのパッチは正式採用されたため、現在はこのパッチを当てる必要はありません。インストールした時点で、この機能は有効になっています。
inetd から起動させる
機能が有効になっていると書いたばかりですが、残念ながらそのままでは使えません。ちょっと面倒な作業が必要です。
inetd は、特定のポートにアクセスがあったときに、それに対応するサーバーを起動するデーモンです。ビューアーが終了して接続が切れると、サーバーも終了してくれて便利です。しかも、FreeBSD の inetd はアクセス制限も出来ます。LAN のパソコンや会社からだけアクセスを許可するというのが出来るわけです。便利ですが、/etc/services
、/etc/inetd.conf
の2つのファイルの編集が必要になります。また、XDM が有効になっている必要もあります。
なお、今回の方法を試した環境では、1024×768でのアクセスが出来ていません。原因がわかり次第反映させる予定です。
/etc/services
の変更
inetd は、アクセスがあったサービスによって、対応したサーバーアプリケーションを起動します。そして、サービスは /etc/services
に書かれたものしか有効になりません。VNC は標準では登録されていませんので、このファイルに書き加えてやる必要があります。私は、次のように書き加えました。
vnc-800x600x16 5910/tcp
vnc-800x600x24 5911/tcp
vnc-1024x768x16 5912/tcp
vnc-1024x768x24 5913/tcp
形式は、サービス名スペースポート番号/プロトコル
です。サービス名は他と被らなければ任意、ポート番号5900番台で他と被らないものを、プロトコルは VNC の場合は tcp です。
/etc/inetd.conf
の変更
サービスが追加されたので、今度は対応設定を inetd の設定ファイル /etc/inetd.conf
に書き加えます。
vnc-800x600x16 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd \
-query localhost -once -geometry 800x600 -depth 16 -securitytypes none
vnc-800x600x24 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd \
-query localhost -once -geometry 800x600 -depth 32 -securitytypes none
vnc-1024x768x16 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd \
-query localhost -once -geometry 1024x768 -depth 16 -securitytype none
vnc-1024x768x24 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd \
-query localhost -once -geometry 1024x768 -depth 32 -securitytype none
長いので途中で1回改行を入れていますが、実際は1行です。\ と直前の改行を削除してください。
アクセス設定
ここまでの変更で inetd の設定は終わり(反映はまだです)ですが、このままだとどこからでもアクセスできてしまいます。安全のため、inetd の機能を使ってアクセス制限をしておきます。
アクセス制限の設定は、/etc/hosts.allow
です。
vnc-800x600x16 : 127.0.0.1 : allow
vnc-800x600x16 : 192.168.0.1 : allow
vnc-800x600x16 : ALL : deny
vnc-800x600x24 : 127.0.0.1 : allow
vnc-800x600x24 : 192.168.0.1 : allow
vnc-800x600x24 : ALL : deny
vnc-1024x768x16 : 127.0.0.1 : allow
vnc-1024x768x16 : 192.168.0.1 : allow
vnc-1024x768x16 : ALL : deny
vnc-1024x768x24 : 127.0.0.1 : allow
vnc-1024x768x24 : 192.168.0.1 : allow
vnc-1024x768x24 : ALL : deny
形式は、サービス名 : 設定対象 : 設定
です。
この例では3行1組で、ローカルからのアクセスを許可、192.168.0.1 からのアクセスを許可、すべてアクセスを拒否となっています。上から順に一致するところを探して適用するので、ローカルと 192.168.0.1 以外は拒否するようになります。仕事先からアクセスできるようにする場合は、そこで使われている WAN 側の IP アドレスからの許可設定を加えてください。
ここまで来たら、inetd に設定を再読み込みさせます。次のコマンドを実行します。
kill -HUP `cat /var/run/inetd.pid`
XDM を有効にする
XDM でログインするようになるので、これが有効になっていないとグレー表示で止まってしまいます。Linux ディストリビューションでは標準で有効になっているようですが、FreeBSD は設定変更が必要です。
wdm のインストール
X.org には xdm というそのままの名前の XDM が付属していますが、VNC とは相性が悪いようで使えません。仕方がないので、私は wdm をインストールしました。wdm は WindowMaker の XDM で、Ports にも入っています。現時点では、x11/wdm にあります。
/etc/ttys
の変更
XDM を有効にするために、/etc/ttys
を編集します。
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
これを、次のように修正します。強調部分が変更箇所です。
wdm 以外を使う場合は、/usr/X11R6/bin/wdm
では駄目です。どのようにすればいいかは、そのアプリケーションのマニュアルなどを参照してください。
ttyv8 "/usr/X11R6/bin/wdm -nodaemon" xterm on secure
変更内容の反映は次のコマンドで行いますが、XDM の設定が終わっていない場合はあとでいいです。
kill -HUP 1
/usr/X11R6/lib/X11/wdm/Xaccess
の変更
アクセスをローカルからのみに限定します。/etc/hosts.allow
への書き加えと /usr/X11R6/lib/X11/xdm/xdm-config
の初期設定(DisplayManager.requestPort
の値が 0 なら OK)ですでに制限はかかっているはずですが、念のためです。/usr/X11R6/lib/X11/wdm/Xaccess
(XDM に wdm を使っている場合)の次のように変更します。
* #any host can get a login window
この行をコメントアウトします。コメントアウトしないと、どこからのアクセスも許してしまいます。
#* #any host can get a login window
次に、このファイルの一番下に(本当はどこでもいいのですが、一番下がわかりやすいです)、localhost
と書き加えます。これによって、localhost (自分が動いているのと同じホスト)からのアクセスを許可します。
編集が終わったら、kill -HUP 1 とコマンドを実行してみてください。/sbin/init
に /etc/ttys
の内容が反映されます。ホストマシンで直接作業している場合は、ログアウトすると XDM が起動されるはずです。ログインしてみてください。うまくいったら、VNC からログインしてみましょう。
なお、wdm に設定を反映させるには、kill -HUP `cat /var/run/xdm.pid` と実行します。
VNC からログイン
通常の場合(前編参照)では、最後の数字はディスプレイ番号でした。inetd 経由の方法では、サービスとして登録したときのポート番号から5900を引いた物になります。800×600で24ビットカラーの場合は11となります。
そのまま OK ボタンを押すと、そのまま XDM の画面に切り替わります。この時点でリモートホストに接続されていますので、あとは普通にログインしてください。
ログイン後の操作は、通常の X Window System と同じです。終了すればビューアも終了します。vncserver も終了するので、そのままほったらかしても大丈夫です。