起動時のキーマップ変更

サーバのキーマップを1年くらい前に設定したはずなのですが...
参考:id:pneumaster:20070120:1169223583
# 実際はjp106上で英語配列になるように書き換えたものを使用していますが,
# どうやら日記としては書かなかったようです.
# そのうち書きます.いつか.気が向いたら.


実際のところloadkeysは実行の後の設定を変えるだけで,起動時の設定を変えていない.
いまさらですがそんなことを先日気づきました.
というのも設定してからは殆どがネットワーク接続していたためだと思います.
(言い訳ですけど.


どうやら/etc/sysconfig/keyboardを編集すればよいようです.*1

KEYTABLE="us"

とか

KEYTABLE="jp106"

になっていると思いますので,今回は

/lib/kbd/keymaps/i386/qwerty/us_on_jp106_mod.map.gz

にあわせて

KEYTABLE="us_on_jp106_mod

と編集します.


ここで

# service keytable restart

サービスを再起動すればよいらしいのですが,
わたしの環境ではkeytableというサービスがありませんでした.
そこでPC起動時にどこで/etc/sysconfig/keyboardが使われているか調べてみると,
/etc/rc.sysinitの中で実行されているようです.*2
以下が該当部分.

 1  if [ -x /bin/loadkeys ]; then
 2   KEYTABLE=
 3   KEYMAP=
 4   if [ -f /etc/sysconfig/console/default.kmap ]; then
 5    KEYMAP=/etc/sysconfig/console/default.kmap
 6   else  if [ -f /etc/sysconfig/keyboard ]; then
 7      . /etc/sysconfig/keyboard
 8    fi
 9    if [ -n "$KEYTABLE" -a -d "/lib/kbd/keymaps" ]; then
10       KEYMAP="$KEYTABLE.map"
11    fi
12   fi
13   if [ -n "$KEYMAP" ]; then
14    if [ -n "$KEYTABLE" ]; then
15      echo -n $"Loading default keymap ($KEYTABLE): "
16    else
17      echo -n $"Loading default keymap: "
18    fi
19    LOADKEYS=loadkeys
20    if [ "${LANG}" != "${LANG%%.UTF-8}" -o "${LANG}" != "${LANG%%.utf8}" ]; then
21          LOADKEYS="loadkeys -u"
22    fi
23    $LOADKEYS $KEYMAP < /dev/tty0 > /dev/tty0 2>/dev/null && \
24       success $"Loading default keymap" || failure $"Loading default keymap"
25    echo
26   fi
27  fi

なるほど.7行目の/etc/sysconfig/keyboardで変数を定義して,
10行目でKEYTABLEをKEYMAPに修正.
23行目でloadkeysを使ってキーマップを設定しているわけですね.
ちなみに2行目のKEYTABLEはデフォルトとして使われているのを期待しているのだと思うのですが,
/etc/sysconfig/keyboardとの住み分けはどうなってるんでしょう.
デフォルトではどちらもroot権限です.
/etc/rc.sysinitは根本のシステムデフォルトとして,
通常は,/etc/sysconfig/keyboardで変更することにしようという姿勢なんでしょうか.,.


話を戻してkeytableサービスが無いので,どうすれば設定を有効にできるのかということについて.
/etc/sysconfig/keyboardの中身を見なくても
サービス再起動だけで全部やってくれるものを探していたのですが,
上記にあるように,結局はloadkeysを呼び出しているというシンプルなものでした.
したがって,起動後の編集した設定反映にはid:pneumaster:20070120:1169223583と同じように
loadkeysを使うことにするのがよいみたいです.


設定反映用に/sbinあたりにスクリプトを書いておくのもいいかもしれませんね.
# サービスとして書くと二重起動とかが面倒だと思うので,/etc/rc.d/init.dの下ではなく.

参考

脚注参照