2019/04/18
CentOS 7 のコンソール画面でキーマップを変更する
キーボードのキーが押下されるとキーコードと呼ばれる一意の値がシステムに通知される。
キーマップはこのキーコードに対して文字を定義するためのファイルで、
システム標準のキーマップは /lib/kbd/keymaps/legacy/i386/qwerty に格納されている。
CentOS 7 のコンソール画面のキーマップ情報は /etc/vconsole.conf ファイルに格納されていて、
起動時に自動で読み込まれコンソール画面のキーマップが設定される。
$ cat /etc/vconsole.con KEYMAP="us" FONT="latarcyrheb-sun16"
例えば US 配列のキーボードで邪魔な Caps Lock を Control に変更したい場合は
Caps Lock のキーコードを調べて押下された時に Control が入力される様なキーマップを用意すれば良い。
キーマップは showkey コマンドで調査する事ができる。
showkey コマンドは画面に表示されている通り最後の入力の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 acter last keypress)... keycode 58 press ここで Capl Lock キーを押下 keycode 58 release ここで Capl Lock キーを離す $結果から Caps Lock キーのキーコードは 58 なのでキーコード 58 に対して Control を入力するキーマップを作成する。 キーマップファイルは他のキーマップファイルを読み込む事ができるので、オリジナルの us.map を読み込んで Caps Lock だけを変更する。 この時、Shift + Caps Lock の場合は Caps Lock としてみる。
キーマップファイルは gzip 形式で圧縮する必要があるので圧縮し、所定のディレクトリに格納する。
# cat << EOF | gzip -c > /lib/kbd/keymaps/legacy/i386/qwerty/us-nocaps.map.gz include "us.map" keycode 58 = Control shift keycode 58 = Caps_Lock EOF
キーマップファイルの準備ができたら loadkeys コマンドでキーマップを読み込み挙動を確認する。
# loadkeys /lib/kbd/keymaps/legacy/i386/qwerty/us-nocaps.map.gz Loading /lib/kbd/keymaps/legacy/i386/qwerty/us-nocaps.map.gzCaps Lock キーが Control に、Shift + Caps Lock キーが Caps Lock になる事が確認できたら、 起動時にキーマップが読み込まれる様に /etc/vconsole.conf ファイルを編集する。
# cp /etc/vconsole.conf /etc/vconsole.conf.orig # sed '/KEYMAP/ s/us/us-nocaps/' /etc/vconsole.conf.orig > /etc/vconsole.confこれで再起動しても Caps Lock は Control となる。
トラックバック
https://blog.bsdhack.org/index.cgi/Computer/20190418.trackback