Plamo 7.0 環境で、USB 切替器を使って USB キーボードを切り替えると、切り替え後に fcitx のオンオフができなくなってハマっていました。つまり USB キーボードを抜き差ししたあとに fcitx のオンオフができなくなっていました。
fcitx のオンオフはこのように設定していました。HHKB を使ってます。
- Command キー(スペースの横)を "Super_L" に割り当てている
.Xmodmap
ファイルに書いて、fcitx の "X Keyboard Integration" Addon で、その.Xmodmap
を読み込ませていたxmodmap -e "keycode 102 = Super_L"
みたいな
- オンオフキーを
Super+Space
に割り当てていた
よくよく調べると xmodmap
で行った変更設定が切り替え後に消えていてデフォルトの Muhenkan
に戻っていることがわかりました。
最初は udev イベントでキーボードさされたのを検知して xmodmap を実行しようかと思ったら、現在開いているデスクトップ環境と実行する環境のセッションも違うし、DISPLAY
環境変数与えたりしてもイマイチうまくいかないので、キーマップ書き換えてしまえ、ということでやりました。
まず、現在使われいてるキーボードマップを調べます。
$ setxkbmap -print xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
keycode は evdev
と alias
を使っているということで、まず /usr/share/X11/xkb/keycode/evdev
を見ると、keycode 102
は <MUHE>
であることがわかりました。
<MUHE> = 102; // Muhenkan
これが定義されているところを xkb_symbols
の pc+us+inet(evdev)
の方で調べると、
$ grep MUHE pc us inet inet: key <MUHE> { [ Muhenkan ] };
と出ますので、ここを強引に、
$ grep MUHE pc us inet inet: //key <MUHE> { [ Muhenkan ] }; inet: key <MUHE> { [ Super_L ] };
のように書き換えて、.Xmodmap の読み込みを止めて再起動すると、無事、xmodmap
なしで keycode 102
が Super_L
になりました。