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 ] }; :
ざっくり解説
xkbは X 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/inet
は xkb_symbols
の行で読み込まれています。
これには、キーボードのシンボル(キーに対するエイリアスのようなものと理解している)とその振る舞いの対応が記述されているようです。
そのマッピングを上のように書き換えた、というわけです。
なぜグローバルな設定ファイルを書き換えたか
後掲する参考記事では ~/.xkb/symbols/
以下に独自のキーシンボル設定ファイルを作り、xkb_symbols
のブロックで include するやり方が記載されています。
自分も最初、それでやろうと思ったのですが、入力モードを 日本語 ⇔ 英語 と切り替えると、設定がリセットされてしまうようで、しばらくこれにハマりました。
おそらく、xkb のグローバルな設定で、 xkb_symbols
が再読み込みされるのだろうと想像しました。
その設定をログインユーザについて書き換える方がベターと思いますが、そこまで調べずに今回はこういうやり方にしてしまいました。
入力モードの切り替えは「Ctrl + Space」でもできる
冒頭で「半角/全角」キーが遠いと述べましたが、入力モードのトグルだけであれば、「Ctrl + Space」でもできます。
これは下の記事にある Fcitx の機能で、Ubuntu 16.04 LTS では、最初から有効になっているようでした。
また、下の記事もこの Fcitx の機能を使った Tips のようです。