雑念ベースは http://blog.yoshitomo.org/ に移転しました。ここはリンクや画像などのために残っているのみで、更新はされません。

« ブログも保存は定期的に・・・ | メイン | 新ロードス島戦記(5) 終末の邪教(上) »

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となります。
ビューアのスクリーンショット(アクセス先を入力したところ) GIF89a形式 3.68KB

 そのまま OK ボタンを押すと、そのまま XDM の画面に切り替わります。この時点でリモートホストに接続されていますので、あとは普通にログインしてください。
ビューアのスクリーンショット(リモートホストのログイン画面)のサムネイル GIF89a形式 28.6KB

 ログイン後の操作は、通常の X Window System と同じです。終了すればビューアも終了します。vncserver も終了するので、そのままほったらかしても大丈夫です。