はじめに
GUIのない最小構成のCentOS7でCaps LockにControlを割り当てようとしたらつまづいたのでメモを残しておきます.
CentOSのバージョンは 7.1.1503 です.
cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
Linuxにあまり詳しくないため,間違いがある場合やより良い方法をご存知の方はコメントをお願いいたします.
変更方法
変更方法ですが,Caps_LockにControlを割り当てたkeymapを用意し,loadkeysコマンドで変更を反映します.
使用するコマンドの一覧は次の通りです.
showkey #keycodeの確認
dumpkeys #現在のkeymapを出力する
loadkeys #keymapをloadする
keycodeを調べる
まずは showkey コマンドによって現在しようしているキーボードのkeycodeを取得します.
showkey コマンドは押した(離した)キーのkeycodeを出力するコマンドです.
また,最後にキーを押した10秒後にコマンドが終了します.
$ showkey
kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]
press any key (program terminates 10s after last keypress)...
keycode 28 release #showkeyコマンド実行時に押したEnterを離した
keycode 58 press #Caps Lockを押した
keycode 58 release #Caps Lockを離した
keycode 29 press #左下のControlを押した
keycode 29 release #左下のControlを離した
以上により,Caps Lockは58,Controlは29であることがわかりました.
keymapをダンプする
dumpkeysコマンドで現在使用しているkeymapの情報をダンプすることができます.
まずはバックアップをとります.
$ dumpkeys > backup.kmap
ダンプされたkeymapには
keymaps 0-127
keycode 1 = Escape
...
のように keycode 128個の割り当てが設定されています.
keyshowコマンドによってCaps_Lockのkeycodeが58であることが分かったため,keycode 58を変更すれば良いことがわかります.
それでは Caps Lock に Control を割り当てたkeymapを作成します.
$ cp backup.kmap caps_to_ctrl.kmap
$ vim caps_to_ctrl.kmap
caps_to_ctrl.kmap の keycode 58 の項目を見てみると次のように書いてあります.
keycode 58 = CtrlL_Lock
keyshowコマンドでは Control のkeycodeが29であることも分かったため,そちらも確認します.
keycode 29 = Control
以上より、keycode 58を次のように変更します.
keycode 58 = Control
あとは変更したkeymapであるcaps_to_ctrl.kmapを読み込むだけです.
keymapの読み込み
keymapの読み込みは loadkeys で行います.
$ sudo loadkeys caps_to_ctrl.kmap
以上で割り当ての変更は完了です.
実行時に自動的に割り当てを変更する
ログイン時に毎回 sudo loadkeys を実行するのは面倒なので,自動的に実行するように設定します.
まずは caps_to_ctrl.kmap を次のディレクトリに移動します.
(任意のディレクトリで問題ありませんが,ユーザのディレクトリ以下に配置するとroot権限でなくても簡単に削除等ができてしまうため,以下が無難だと思います.)
$ sudo mkdir /usr/share/keymaps
$ sudo mv caps_to_ctrl.kmap /usr/share/keymaps
次に,/etc/rc.local に次の一文を追記します.
rc.local は boot 時に実行されます.
/usr/bin/loadkeys /usr/share/keymaps/caps_to_ctrl.kmap
ここで注意ですが,rc.localを良く見ると次のような記述があります.
# Please note that you must run 'chmod +x/etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
/etc/rc.d/rc.local に実行権限を与えないと rc.localが実行されず,loadkeysも実行されません.
したがって,次のコマンドを実行します.
$ sudo chmod +x /etc/rc.d/rc.local
これで設定は完了です.
まとめ
CentOS7 で Caps Lock に Ctrl を割り当てました.
rc.local に loadkeys を記述したことによって,起動時に自動的に変更が適用されます.
もし変更の際に予想外のミスをしてしまった場合は,最初に作成したバックアップ backup.kmap を loadkeys することで元の keymap に変更することができます.
参考
以下のサイトが大変参考になりました.
http://lambdalisue.hatenablog.com/entry/2013/09/27/212118
http://superuser.com/questions/290115/how-to-change-console-keymap-in-linux