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