Linux CD-ROM ゲームシステム |
||
YAMAMORI Takenori ●yamamori |
ここで、loginせずに、いきなりゲームができるように、 シングルユーザモードでシステムが起動するように設定する。 そのためには、/etc/inittabを修正して、 システムのデフォルトのrun levelを1に変更する。
id:3:initdefault: ↓ id:1:initdefault: |
なお、/etc/inittabを設定したつもりでも、 そのあとにXconfiguratorを起動すると、 /etc/inittabのデフォルトrun levelが3または5に 書き換えられてしまうので注意が必要だ。
シングルユーザモードでは、/etc/rc.d/rc1.d 以下のスクリプトが実行される。 そこで、/etc/rc.d/rc1.d/S99gameというシェルスクリプトを新たに作成して、 ここに、ゲーム起動のためのコマンド等を書く。 S99gameのパーミッションのxフラグも忘れずに立てておく。
なお、本来ならばrcスクリプトは、引数のstartをチェックしたり しなければならないが、それは省略している。 S99gameのリストを以下に示す。
#!/bin/sh /etc/rc.d/init.d/xfs start PATH=/usr/X11R6/bin:/usr/local/bin:"$PATH"; export PATH HOME=/root; export HOME cd mkdir /tmp/gamefd umount /dev/fd0 until mount -t vfat /dev/fd0 /tmp/gamefd do echo echo -n 'Insert game FD and type [ENTER] or q to skip: ' read a if [ X$a != X ]; then break fi done xinit & |
S99game の最初の方の“/etc/rc.d/init.d/xfs start”という行で、 フォントサーバを起動している。 これは、Vine 2.0の場合、XF86Configファイルのフォント設定が、 フォントサーバを使うようになっているためで、 xfsを起動しないとXサーバが起動しない。 別の方法として、XF86Configをフォントサーバを使わないように 設定変更してしまうことも考えられるが、ここではより簡単な方法として xfsを起動することにした。
次に、環境変数のPATHとHOMEを設定している。
その後、FDのマウントを試みて、失敗した場合はメッセージを出し、 再度マウントを試みるようにしている。
S99gameの最後の行でxinitを実行し、Xを起動している。 これにより、/root/.xinitrc の記述にしたがってXのアプリケーションが起動するので、 ここにゲームを起動するためのコマンドを書いておく。
exec circuslinux --digital |
ここではウィンドウマネージャすら必要ないため、 このようにたった1行の単純な.xinitrcになる。
S99gameと.xinitrcの設定ができたら、 ここでゲームのセーブデータ用FDをumountしてドライブから抜いてから、
# /sbin/init 6
としてリブートしてみよう。すると、起動途中で
Insert game FD and type [ENTER] or q to skip:
と表示されるので、ゲームのセーブデータ用FDを入れて[ENTER]を押すと次に進む。 FDを入れずに q [ENTER]と入力すると、FDなしで次に進む。
そして、loginなしでいきなりゲームが起動するはずだ。 ここまでで、CD-ROMゲームシステムの完成時の外観がつかめたはずである。
ところで、S99game内でxinitは &を付けて起動しているため、 ゲームの起動と並行してS99gameスクリプトは終了する。 そして、S00singleに処理が戻って、その中でシングルユーザシェルが起動される。 これにより、ゲーム中も仮想画面を切替え、シェル上でメンテナンス作業を 行なうことができる。 仮想画面の切替えは、
[Ctrl]+[Alt]+[F1] -- コンソール上のシェルの画面、 [Ctrl]+[Alt]+[F2] -- ゲームの画面、
となる。
シェル画面への切替え直後はプロンプトが見えないため、 一度[Enter]を押してみること。
なお、通常のマルチユーザモードでは6画面+Xの画面となるが、 それとは違って、この2画面のみになるので注意すること。 また、このシェルのPATHやHOMEは、S99game 内で設定したものとは違うので、これも注意すること。
シングルユーザモードでのゲームの起動を確認したら、 いったんゲームを終了してからシェル上で、
bash# telinit 3
と入力することにより、通常のマルチユーザモードに移行することができる。 今後は、HDDからのブートのたびにゲームが起動してしまうため、 HDD上での作業を行なうために、ゲームを終了してtelinit 3 を実行することを覚えておく。
なお、シングルユーザモードのシェル上でexitと入力すると、 再度ランレベル1のスクリプトが実行され、再びゲームが起動する。