ページ

2012年4月2日月曜日

Debian 6 squeeze のキーマップ設定

キーボードのキーを自分好みにカスタマイズしたいことはよくありますが、そもそもシステムでどのように設定されているのか気になると思います。
 
X では XKB を使用してキーマップの設定が行われます。
squeeze においては Xserver 起動時に /etc/default/keyboard の設定内容から、XKB のオプションである XkbModel、XkbLayout、XkbVariant、XkbOptions が設定され、XkbRules で指定されたルールに基づいてキーマップが決定されます。 

私の環境では /etc/default/keyboard は以下のようになっていました。
XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
XkbRules はどのように決まるのかというと、squeeze の X は、--with_default_xkb_rules=evdev を指定してビルドされているので、デフォルトで XkbRules は evdev となり、ルールファイル /usr/share/X11/xkb/rules/evdev が適用されるようになります。

/var/log/Xorg.0.log を見るとどれが適用されたのか分かります。
(II) XINPUT: Adding extended input device "AT Translated Set 2 keyboard" (type: KEYBOARD)
(**) Option "xkb_rules" "evdev"
(**) Option "xkb_model" "pc105"
(**) Option "xkb_layout" "jp"
ルールファイルには、XKB のオプション設定に応じて、どのテンプレートを適用するかが書かれています。

/usr/share/X11/xkb/rules/evdev を見ていくと、XkbModel = pc105、XkbLayout = jp の場合は、キーマップの各パラメータは以下のように決まることがわかります。
  • keycodes :  evdev+aliases(qwerty)
  • symbols :  pc+jp+inet(evdev)
  • geometry :  pc(pc105)
  • compat :  complete+japan
  • types :  complete
この設定は setxkbmap -print -v コマンドで確認できます。
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete+japan
symbols:    pc+jp+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete+japan"        };
        xkb_symbols   { include "pc+jp+inet(evdev)"     };
        xkb_geometry  { include "pc(pc105)"     };
};
Keycode は evdev+aliases(qwerty) なので、以下のファイルが適用されることになります。
  1. /usr/share/X11/xkb/keycodes/evdev
  2. /usr/share/X11/xkb/keycodes/alias の qwerty セクション
 また、Keysym は pc+jp+inet(evdev) なので、以下のファイルが適用されることになります。
  1. /usr/share/X11/xkb/symbols/pc
  2. /usr/share/X11/xkb/symbols/jp
  3. /usr/share/X11/xkb/symbols/inet の evdev セクション
※重複する項目は、後のファイルが適用されます。


Xserver はキーボードで押されたキーの Keycode に対応する Keysym を、Xclient に渡す仕組みになっていますので、この Keycode <-> Keysym の変換に手を加えると、自分好みのキーにできるわけです。

0 件のコメント:

コメントを投稿