CapsをCtrlに入れ替える

Emacsを使おう!と使い始めたものの,Ctrl押したつもりがCapsを押してしまってがっくりすることがしばしば.
そこでCapsをCtrlに入れ替えることにした.ついでに,Windows Keyなどの割り当ても変更する.

CapsをCtrlにする

/etc/X11/xorg.confを開いて

Section "InputDevice"
    Identifier  "Generic Keyboard"
    Driver      "kbd"
    Option      "CoreKeyboard"
    Option      "XkbRules"  "xorg"
    Option      "XkbModel"  "jp106"
    Option      "XkbLayout" "jp"
    Option      "XkbVariant"    "jp106"
EndSection

となっているところに以下を追加.個人的には,capsは使用しないのでctrlと入れ替えるのではなく両方ともctrlにする.入れ替えたい場合は,ctrl:swapcapsとすればOK.

Option      "XkbOptions"    "ctrl:nocaps"

keycodeを調べる

まず入れ替える予定のキーコードを調べる必要がある.調べるにはxevを使用する.xevを起動後,何かキーを叩けばkeycodeがわかる.
以下のは右のwin keyを叩いた例.この場合,keycode は116となる.

KeyPress event, serial 32, synthetic NO, window 0x1600001,
    root 0x3f, subw 0x0, time 2016149084, (128,103), root:(166,566),
    state 0x0, keycode 116 (keysym 0xffea, Super_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

割り当てられているものを調べる.

xmodmapを使用する.

$xmodmap -pke 

pkeオプションの意味は man xmodmap より転載.キーマップテーブルを標準出力に出力するとかそんなんかな?

This option indicates that the current keymap table  should  be
printed  on the standard output in the form of expressions that
can be fed back to xmodmap

.Xmodmap

~/.Xmodmapを作成する.

!NumLock を押さなくてもテンキー使用可能に
keycode 112 = slash
keycode 63  = asterisk
keycode 82  = minus
keycode 79  = 7
keycode 80  = 8
keycode 81  = 9
keycode 86  = plus
keycode 83  = 4
keycode 84  = 5
keycode 85  = 6
keycode 87  = 1
keycode 88  = 2
keycode 89  = 3
keycode 108 = Return
keycode 90  = 0
keycode 91  = period
!NumLock key には何も割り当てない
keycode 77  = 
!Windows key を Alt key に
keycode 115 = Alt_L Meta_L
keycode 116 = Alt_R Meta_R

あとはxmodmapで読み込む.

$xmodmap ~/.Xmodmap

これらはX前提なのでコンソール上では効かない.コンソールで効かせる場合は,KubuntuでCtrlとCapsLockの入れ換え - 猫大好き、ネットワーク大好き。を参考にやってみる.(まだ試してない)