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
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) なので、以下のファイルが適用されることになります。- /usr/share/X11/xkb/keycodes/evdev
- /usr/share/X11/xkb/keycodes/alias の qwerty セクション
- /usr/share/X11/xkb/symbols/pc
- /usr/share/X11/xkb/symbols/jp
- /usr/share/X11/xkb/symbols/inet の evdev セクション
Xserver はキーボードで押されたキーの Keycode に対応する Keysym を、Xclient に渡す仕組みになっていますので、この Keycode <-> Keysym の変換に手を加えると、自分好みのキーにできるわけです。
0 件のコメント:
コメントを投稿