2011年9月4日日曜日

電源ボタンを入れて待ってたら、gnomeが立ったらうれしい(boot時にautologinする方法)

1.背景
家のマシンに限った話をすると、
  • 使い終わったら電源を落とす。
  • 私しかユーザーはいないし、sshされない。
  • 使うときは、電源を入れるとlogin画面で止まっていて、loginしてstartxとtypeし、gnome環境で生活する。
という日々を送っていた。

しかし、
電源ボタンを入れて待っていたら、gnome が立って欲しい!
ので設定した。

2.概要
/etc/gettytabと/etc/ttysを編集し、ttyv4に自動ログイン(autologin)し、~/.bash_profileでttyv4にloginしたときはlogin直後にstartxするように設定する。

3. 自動ログイン
/etc/gettytabと/etc/ttysを以下のように修正する。

--- /etc/gettytab.orig    2011-09-03 20:59:47.000000000 +0900
+++ /etc/gettytab    2011-09-03 21:08:25.000000000 +0900
@@ -164,6 +164,10 @@
 P|Pc|Pc console:\
     :ht:np:sp#115200:

+P1|Pc1|Pc1 console:\
+    :al=username:ht:np:sp#115200:
+
+
 #
 # Wierdo special case for fast crt's with hardcopy devices
 #

--- /etc/ttys.orig   2007-01-12 16:42:20.000000000 +0900
+++ /etc/ttys    2011-09-03 21:08:55.000000000 +0900
@@ -37,7 +37,7 @@
 ttyv1    "/usr/libexec/getty Pc"        cons25    on  secure
 ttyv2    "/usr/libexec/getty Pc"        cons25    on  secure
 ttyv3    "/usr/libexec/getty Pc"        cons25    on  secure
-ttyv4    "/usr/libexec/getty Pc"        cons25    on  secure
+ttyv4    "/usr/libexec/getty Pc1"        cons25    on  secure
 ttyv5    "/usr/libexec/getty Pc"        cons25    on  secure
 ttyv6    "/usr/libexec/getty Pc"        cons25    on  secure
 ttyv7    "/usr/libexec/getty Pc"        cons25    on  secure
patch形式になれていない人へ
diff の読み方は、/etc/ttysの例でいくと、
@@ -37,7 +37,7 @@ は「/etc/ttys.origの37行目から7行分と/etc/ttysの37行目から7行分を表示しています」という意味だ。
そのあとは、「-で始まる行は、ttys.origにあってttysにない行、+で始まる行はtty.origにはなくてttysにはある行です。他の行は両方のファイルにありますが、どの行かわかりやすい用に表示しています」という意味だ。
つまり、40行目のPcをPc1にするように、エディタで編集しろと言うことだ。

上は
$ diff -u /etc/ttys.orig /etc/ttys
の出力をコピペしたもので、unified context という形式で、patchを当てるときに
使う形式でもある。diffとpatchのマニュアルに目をとおしておくこと。

これでboot直後に、ttyv4に自動ログインするようになった。
参考 昔々のhandbook http://docs.freebsd.org/doc/3.0-RELEASE/usr/share/doc/ja/handbook/handbook172.html

4.gnomeをたてる
私は、default shell としてbashを使っているので、loginしたときに~/.bash_profile が実行される。なので、~/.bash_profileに以下のように追記する。

if [ `tty` = "/dev/ttyv4" ]; then
        startx
fi
これで ttyv4 でログインした時に限り、ログイン直後に startx が実行されるようになる。

csh、tcshの人へ
.login に正しい書式で、同様に書けばよろしい。if文の書式は自分で調べてること。

以上、/etc/ttys、/etc/gettytab、~/.bash_profileの3ファイルを書き直せば、
電源を入れると、gnomeがあなたを待っている。さあrebootしよう。

5.注意
UNIXマシンに詳しくない同居人がいる人は、あなたのプライバシーが暴かれる可能性が増大します。電源を入れて黒い画面で login: と表示されたら手も足もでない人は多いですが、gnomeが立っていたらファイルを見ることは簡単です。
しかし、パートナーがUNIXに詳しい場合はLiveCDで起動して、HDDをmountしてすべて見ることができるので、あまり危険度は変わりません。気にしないでよいでしょう。

Xserver をlocalhostのclient以外が使う場合は注意が必要です。上のように、rootでautologinして、、、と思うかもしれませんが、うまくやらないと、正当なユーザ以外でもXserverを使えるようになったり、他のユーザのウインドウをとったりすることができてしまうようになります(例えば xinit 以外で Xserver を立てた場合など)。
上記のように、個人ユーザで startxする分には大丈夫ですが、気をつけてください。