手軽に使えるシンプルな TFTP サーバを作ってみました。
2012年7月19日木曜日
2012年4月12日木曜日
Debian squeeze キーバインドの変更
キーボードに Happy Hacking Lite を使っているのですが、Emacs を使う時に Meta にあたる Esc キーや ALT キーの位置がどうも使いづらいので、Space キーのすぐ左にある 無変換 キーを Meta に変更しました。
xmodmap でやればコマンド一発だし簡単、でもいいですが、無変換 キーは普段使用しないので、キーマップ自体を変更しています。
Keycode <--> Keysym のマッピングを変更して、無変換 キーの Keycode に対して、Meta の Keysym を返すようにするということですね。
まず、 自分の環境で 無変換 キーがどの Keycode になっているのかを xev コマンドで確認します。
Debian 6 squeeze のキーマップ設定 で書きましたが、私の環境では Keycode に関するテンプレートは、
<MUHE> キーが割り当てられています。
次に Keysym に関するテンプレートは以下になっていますので、
これを Meta_L に変更します。
最後に Xserver を再起動して、xev コマンドで Keycode 102 の Keysym が Meta_L になっていることを確認します。
xmodmap でやればコマンド一発だし簡単、でもいいですが、無変換 キーは普段使用しないので、キーマップ自体を変更しています。
Keycode <--> Keysym のマッピングを変更して、無変換 キーの Keycode に対して、Meta の Keysym を返すようにするということですね。
まず、 自分の環境で 無変換 キーがどの Keycode になっているのかを xev コマンドで確認します。
Keycode は 102 であることが分かります。KeyRelease event, serial 34, synthetic NO, window 0x1000001, root 0x101, subw 0x0, time 89541208, (-103,502), root:(640,520), state 0x0, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
Debian 6 squeeze のキーマップ設定 で書きましたが、私の環境では Keycode に関するテンプレートは、
- keycodes : evdev+aliases(qwerty)
default xkb_keycodes "evdev" {
・
・
// Keys that are generated on Japanese keyboards
//<HZTG> = 93; // Hankaku/Zenkakau toggle - not actually used
alias <HZTG> = <TLDE>;
<HKTG> = 101; // Hiragana/Katakana toggle
<AB11> = 97; // backslash/underscore
<HENK> = 100; // Henkan
<MUHE> = 102; // Muhenkan
<AE13> = 132; // Yen
<KATA> = 98; // Katakana
<HIRA> = 99; // Hiragana
<JPCM> = 103; // KPJPComma
//<RO> = 97; // Romaji
};
次に Keysym に関するテンプレートは以下になっていますので、
- symbols : pc+jp+inet(evdev)
これを Meta_L に変更します。
xkb_symbols "evdev" {
・
・
key <HKTG> { [ Hiragana_Katakana ] };
key <HENK> { [ Henkan ] };
//key <MUHE> { [ Muhenkan ] };
key <MUHE> { [ Meta_L ] };
・
};
最後に Xserver を再起動して、xev コマンドで Keycode 102 の Keysym が Meta_L になっていることを確認します。
KeyPress event, serial 34, synthetic NO, window 0x1a00001,
root 0x101, subw 0x0, time 88590427, (549,-233), root:(550,622),
state 0x0, keycode 102 (keysym 0xffe7, Meta_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
2012年4月2日月曜日
Debian 6 squeeze のキーマップ設定
キーボードのキーを自分好みにカスタマイズしたいことはよくありますが、そもそもシステムでどのように設定されているのか気になると思います。
X では XKB を使用してキーマップの設定が行われます。
squeeze においては Xserver 起動時に /etc/default/keyboard の設定内容から、XKB のオプションである XkbModel、XkbLayout、XkbVariant、XkbOptions が設定され、XkbRules で指定されたルールに基づいてキーマップが決定されます。
私の環境では /etc/default/keyboard は以下のようになっていました。
/var/log/Xorg.0.log を見るとどれが適用されたのか分かります。
/usr/share/X11/xkb/rules/evdev を見ていくと、XkbModel = pc105、XkbLayout = jp の場合は、キーマップの各パラメータは以下のように決まることがわかります。
Xserver はキーボードで押されたキーの Keycode に対応する Keysym を、Xclient に渡す仕組みになっていますので、この Keycode <-> Keysym の変換に手を加えると、自分好みのキーにできるわけです。
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 の変換に手を加えると、自分好みのキーにできるわけです。
登録:
投稿 (Atom)