TenForward

技術ブログ。はてなダイアリーから移転しました

xkbのファイルを書き換えてキーマップを調整する

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 は evdevalias を使っているということで、まず /usr/share/X11/xkb/keycode/evdev を見ると、keycode 102<MUHE> であることがわかりました。

        <MUHE> = 102;   // Muhenkan

これが定義されているところを xkb_symbolspc+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 102Super_L になりました。

参考