ゼロ円でできるXサーバ
WindowsでLinuxをリモート操作(後編)

中澤 勇
@IT編集局
2001/4/24

VNCをinetdで起動

 時々VNCを使うだけであれば、以上の設定で十分ではないかと思う。しかし、幾つかの欠点もある。まず、VNC使用時は、先にtelnetなどでLinuxに接続してからVNCサーバを起動、VNCを使い終わったら再びtelnetなどでVNCサーバを停止させる必要がある(個人環境であればVNCサーバを起動させたままでもよいかもしれないが)。また、セキュリティ的に脆弱であることも気になる。一応暗号化されているとはいえ、パスワード以外にアクセスを制限する手段がないのである。

 そこで思い起こされるのがinetdの存在だ。inetdはクライアントからのリクエストに応じて必要なサーバを起動させるもので、常駐させておく必要のないサーバ類(telnetなど)はinetd経由になっている。また、inetdを使えばTCP Wrapper(tcpd)で経路によるアクセス制御を行うこともできる。VNCサーバにアクセスできるマシンを特定のIPアドレスやネットワークで限定すれば、セキュリティを大幅に強化できる。いずれにせよ、インターネットからアクセスできるマシンでVNCを利用するのはオススメできないが……。

 VNCサーバをinetdから起動できるようにできないだろうか? そう考えたのがAndre Moreira氏である。同氏は、VNCをinetd経由で起動させるiXvnc patch for VNC X-Serverhttp://www.dei.isep.ipp.pt/~andre/extern/ixvnc.htm)というパッチを作成した。パッチ登場時はVNCをソースで入手して、このパッチを当ててからコンパイルする必要があった。しかし、VNCの最新版である3.3.3R2からはこのパッチが取り込まれたため、これまでの手順でインストールしたバイナリ版はすでにinetdに対応しているのである。前編の始めで「ソース版は必要ない」と書いた理由はここにある。

■/etc/servicesの設定

 VNCサーバをinetd経由で起動するためには、若干設定の追加が必要だ。

 まず、rootになって/etc/servicesに以下の内容を追加する。

vnc-800x600x8       5950/tcp
vnc-800x600x16      5951/tcp
vnc-1024x768x8      5952/tcp
vnc-1024x768x16     5953/tcp

 /etc/servicesは

サービス名    ポート/プロトコル

という書式になっている。「vnc-800x600x8」などの部分は任意に設定するサービス名であり、上記のとおりにする必要はないが、この後で設定する/etc/inetd.confの記述もそれに合わせて変更すること。また、ここでは4つのサービスを追加したが、1つだけでもよいし、さらに増やしてもよい。ポート番号を重複させないことにだけ注意。

■/etc/inetd.confの設定

 次に/etc/inetd.confの設定だ。/etc/inetd.confに以下の内容を追加する。

vnc-800x600x8   stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd -query ホスト -once -geometry 800x600 -depth 8 -cc 3
vnc-800x600x16  stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd -query ホスト -once -geometry 800x600 -depth 16
vnc-1024x768x8  stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd -query ホスト -once -geometry 1024x768 -depth 8 -cc 3
vnc-1024x768x16 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd -query ホスト -once -geometry 1024x768 -depth 16

 「vnc-800x600x8」などは、/etc/servicesで指定したサービス名。両者の対応がとれていないとVNCを起動できないので注意すること。「/usr/local/bin/Xvnc」はVNCサーバ(Xvnc)のパスである。

 以降はVNCサーバを起動させる際のパラメータ指定だ。

-inetd
 Xvncをinetd経由で起動させるオプション(必須)

-query ホスト
 XDMCP(X Display Manager Control Protocol)を使ってユーザー認証を行う指定。「ホスト」は、VNCサーバが動作するマシンを指定する。筆者の場合はIPアドレスにした。
例:-query 192.168.33.8

-once
 xsessionが終了した時点でVNCサーバを終了させる

-geometry 800x600 -depth 8 -cc 3
 仮想Xデスクトップのサイズと色数の指定。-depth 8の場合は-cc 3も追加する

■gdmの設定

 XDMCPでユーザー認証を行わせるため、Linuxをグラフィカルログインに変更しておく必要がある(テキストログインにしていた場合)。ディストリビューションによってグラフィカルログインに使うディスプレイマネージャはxdm、kdmなどさまざまだが、筆者が使っているLASER5 Linux 6.4の場合はGNOMEのgdmなので、これをそのまま使うことにする。

 LASER5 Linux 6.4のデフォルト設定では、XDMCPが無効になっているので/etc/X11/gdm/gdm.confの以下の部分を編集して有効化する。

[xdmcp]
Enable=1

 これで準備は完了。後はLinuxをランレベル5で起動してグラフィカルログイン化する。グラフィカルログイン化する方法は、Linux Tipsの「テキストログインとグラフィカルログインを切り替えるには」を参照していただきたい。

 なお、筆者の環境ではこれだけで問題なく接続できたが、これだけではうまくいかないというケースを聞いたことがある。VNC経由でグラフィカルログインしてもLinuxのデスクトップ画面が表示されない場合は、/etc/X11/gdm/gdm.confの[daemon]セクションにある

KillInitClients=1

KillInitClients=0

に変更してみよう。

コラム:本当にあったコワイ話

 あれは大学時代、バイトで某所の深夜警備員をしたときのこと……は別の機会に譲るとして、gdmの話である。

 gdmの設定を変更するためにgdm.confを編集した際、ちょっとした入力ミスを犯してしまった。それに気付かず、そのままランレベル5に変更したときに「それ」は始まった。

 一瞬テキストのログインプロンプトが見えたかと思った瞬間に画面が切り替わり、次の瞬間にはまたログインプロンプトが一瞬見える、という状態が繰り返されるだけになってしまったのだ。gdmの起動→失敗→gdmの起動というループに陥ったと思われる。

 設定ミスは一目瞭然だが、これではログインできない。そこで、ノートPCからsshで接続しようとしたところ、sshでの接続まで失敗してしまう。telnetでの接続が可能だったので、gdm.confを直してリブートをかけることで事なきを得たが、もう少しでfsck覚悟でリセットする羽目に陥るところだった。普段はtelnetを殺しているのだが、このときはたまたま別のテストのためにtelnetを生かしておいたのが幸いした。

 ログインまわりの設定をいじるときは、別の手段も用意しておくべきだということを学んだ夜であった。

Windowsからの接続

 VNCサーバをinetd経由で起動させる場合、Windowsからの接続方法も若干異なる。もちろん、「vncserver :1」などとして、あらかじめVNCサーバを起動しておく必要はない。

 Windowsから接続する際は、まずWindows側でVNCビューアを起動する。接続先を問い合わせるダイアログボックスが表示されたら、従来のディスプレイ番号の代わりに/etc/servicesに記述したポート番号を指定する。ただし、ポート番号は5900を引いた下2けただけにする。

 例えば、/etc/servicesに

vnc-800x600x8       5950/tcp
vnc-1024x768x16     5951/tcp

という設定を追加しており、800×600ドット 8bitsカラーでVNCサーバを起動させるには、「192.168.33.8:50」と指定する(IPアドレスは環境に応じて読み替えること)。1024×768ドット 16bitsカラーにするなら「192.168.33.8:51」だ。

 接続先を指定すると、パスワード入力ダイアログボックスをパスしてgdmの画面になる。

画面1 VNC経由で表示されたgdmの画面(画像をクリックすると拡大表示します)

 ここでLinuxのユーザーアカウントとそのパスワード(VNCで設定したパスワードではないことに注意)を入力する。

画面2 800×600ドットのサイズで起動したGNOME。入出力はWindowsで行われるが、処理自体はLinuxマシンで実行する(画像をクリックすると拡大表示します)

 なお、あらかじめvncserverでVNCサーバを待機させておく方法とinetd経由で接続時に起動させる方法は共存できる。VNCビューワで「192.168.33.8:1」のようにディスプレイ番号を付加した場合は待機していたVNCサーバが、「192.168.33.8:5x」としてポート番号を指定した場合はinetd経由で新たにVNCサーバが起動する。共存させる意義には疑問がないでもないが。

2/2

Index
ゼロ円でできるXサーバ
WindowsでLinuxをリモート操作(後編)
  前編
  VNCの高度なカスタマイズ
 新規ユーザーへの対応
 Window Managerを簡単切り替え
VNCをinetdで起動
 /etc/servicesの設定
 /etc/inetd.confの設定
 gdmの設定
  Windowsからの接続

Linux Square全記事インデックス


 Linux Squareフォーラム Windowsとの共存/連携関連記事
特集:ゼロ円でできるデュアルブート
LinuxとWindowsを共存させる

Windows 98とLinuxの最も基本的なデュアルブート環境を構築しながら、OSの共存に必要な基礎知識を紹介する
特集:続ゼロ円でできるデュアルブート
LinuxとWindows 2000を共存させる

今回はLinuxとWindows 2000の組み合わせに挑戦しよう。Windows 2000のOS LoaderにLinuxを登録する方法を紹介する
特集:ゼロ円でできるXサーバ
WindowsでLinuxをリモート操作(前編)

Windows用Xサーバは高価だ。しかしライセンスフリーのVNCなら低コストでリモート操作環境を構築できる。その方法を紹介しよう
特集:ゼロ円でできるXサーバ
WindowsでLinuxをリモート操作(後編)

今回は多ユーザー環境などに適応させるカスタマイズ方法や、inetd経由でVNCサーバを自動起動させる方法を紹介しよう
特集:真ゼロ円でできるXサーバ
Windows 2000で動かすXFree86[インストール編]

Windows上にGNU環境を作るCygwinを使って、Windows 2000でXFree86を動かしてみよう。これで完全なフリーのXサーバが手に入る
特集:真ゼロ円でできるXサーバ
Windows 2000で動かすXFree86[設定・運用編]
Cygwin/XFree86でLinuxサーバにアクセスしよう。sshによる接続や日本語入力、Win2kでWindow Makerを動かす方法まで
特集:真ゼロ円でできるXサーバ
Cygwin/XFree86最新事情と日本語化

多くのパッケージが標準setup.exeでインストールできるようになったCygwin。今回は日本語化を中心に環境構築方法を解説
特集:真ゼロ円でできるXサーバ
Cygwin/XFree86でKDE & GNOMEを使おう
Cygwin/XFree86の準備ができたので、Xサーバとして活用しよう。後半ではKDEとGNOMEを動かすための方法を解説
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH