weblog of key_amb

主にIT関連の技術メモ

Ubuntu + xkb で JISキーボードのキー配置入れ替え

はじめに

仕事で使っている Mac は、昔USキーボードがかっこいいと思っていた頃にUSキーボードにしたままなのですが、家ではJIS配置のキーボードを使っています。
JIS配置の場合、「変換」「無変換」キーが余ること、「半角/全角」「Esc」キーが遠いことから、昔から以下のように入れ替えて使っています。

  • 「変換」 ⇔ 「半角/全角」
  • 「無変換」 ⇔ 「Esc」

…で、最近 Ubuntu 16.04 LTS でこれのやり方を調べてやってみたので、本記事にメモしておきます。

TL;DR

xkb の設定ファイル /usr/share/X11/xkb/symbols/inet を以下のように直接編集しました。

  // Evdev Standardized Keycodes
  partial alphanumeric_keys
  xkb_symbols "evdev" {
      :
-     key <HENK>   {      [ Henkan                ]       };
-     key <MUHE>   {      [ Muhenkan              ]       };
+     //key <HENK>   {      [ Henkan                ]       };
+     //key <MUHE>   {      [ Muhenkan              ]       };
+     key <HENK>   {      [ Zenkaku_Hankaku       ]       };
+     key <MUHE>   {      [ Escape                ]       };
+     key <ESC>    {      [ Muhenkan              ]       };
+     key <TLDE>   {      [ Henkan                ]       };
      :

ざっくり解説

xkbX Window System の一部で、キーボードを制御するもののようです。

この xkb の設定は下のコマンドで確認することができます。

setxkbmap -print

自分の環境では次の出力が得られました。

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+jp+us:2+inet(evdev)"    };
    xkb_geometry  { include "pc(pc105)" };
};

設定ファイル /usr/share/X11/xkb/symbols/inetxkb_symbols の行で読み込まれています。
これには、キーボードのシンボル(キーに対するエイリアスのようなものと理解している)とその振る舞いの対応が記述されているようです。

そのマッピングを上のように書き換えた、というわけです。

なぜグローバルな設定ファイルを書き換えたか

後掲する参考記事では ~/.xkb/symbols/ 以下に独自のキーシンボル設定ファイルを作り、xkb_symbols のブロックで include するやり方が記載されています。
自分も最初、それでやろうと思ったのですが、入力モードを 日本語 ⇔ 英語 と切り替えると、設定がリセットされてしまうようで、しばらくこれにハマりました。
おそらく、xkb のグローバルな設定で、 xkb_symbols が再読み込みされるのだろうと想像しました。

その設定をログインユーザについて書き換える方がベターと思いますが、そこまで調べずに今回はこういうやり方にしてしまいました。

入力モードの切り替えは「Ctrl + Space」でもできる

冒頭で「半角/全角」キーが遠いと述べましたが、入力モードのトグルだけであれば、「Ctrl + Space」でもできます。
これは下の記事にある Fcitx の機能で、Ubuntu 16.04 LTS では、最初から有効になっているようでした。

また、下の記事もこの Fcitx の機能を使った Tips のようです。

参考記事