Ubuntu 12.04を利用している時、キーバインドの変更(例えばCaps LockとCtrlの入れ替えなど)は、.Xmodmapファイルをホームディレクトリに配置するだけで対応できてきた。 で、最近インストールしたUbuntu 14.04では、この方法では変更できなかった。
で、いろいろ調べていくと、Xmodmapは事実上の廃止状態で、Ubuntu 13.10以降ではxkbを利用するのが正攻法ってことらしい。ので、xkbでキーバインドを変更する方法を色々調べてみた。
xkbで設定を行えば、X window上で動作しているすべてのアプリに設定が反映されるので。
Caps LockとCtrlの入れ替え程度であれば、xkb以外にも方法があるのだが、xkbを使う方法では、「;キー」にenterキーを割り当てるなど変則的な対応もできるのが魅力。
変更は次のように行う。
xkbでキーバインドを変更する
設定は、keyboard layout - Use setxkbmap to swap the Left Shift and Left Control - Unix & Linux Stack Exchangeに書かれている方法を元に行ってみた。
基本的な流れは次の通り
- ~/.xkb/keymapフォルダにベースとなる設定ファイルを格納
- ~/.xkb/symbolsフォルダに変更するキーバインドを定義したファイルを格納
- 起動時に設定が反映されるように設定
まずベースとなる設定ファイル(mykbdファイル)を作成する。
$ mkdir -p ~/.xkb/keymap ~/.xkb/symbols $ setxkbmap -print > ~/.xkb/keymap/mykbd
次に変更するキーバインドを設定する。ここではCapsLockとCtrlの入れ替え、チルダとEscキーの入れ替え(USキーボード使ってるので)
$ cat ~/.xkb/symbols/myswap partial modifier_keys xkb_symbols "swapkeys" { replace key <ESC> {[ quoteleft, asciitilde ] }; replace key <TLDE> {[ Escape ] }; replace key <LCTL> { [ Caps_Lock ] }; replace key <CAPS> { [ Control_L ] }; };
ここでは
myswapファイルの内容を、mykbdファイルに反映するように指定する。xkb_symbolsの項目のの最後に"+myswap(swapkeys)“を追加する。一例として、追加後のファイルはこんな感じ。
$ cat ~/.xkb/keymap/mykbd xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)+myswap(swapkeys)" }; xkb_geometry { include "pc(pc105)" }; };
設定を起動時に反映させるように、.bashrcファイル(bashの場合)に以下の一文を追加する。
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
あとは、再ログインしたら設定が反映される。