確認環境
| PC | Thinkpad X1 Carbon 2nd Gen |
| OS | FreeBSD 12.0-RELEASE-p3 |
課題
一般的な日本語キーボードのキー配置は、ESCキーが左上にある。
ホームポジションから果てしなく遠い。
vimユーザには死活問題だ。
Normalモードに戻るためにCtrl+[なんて打ってられない。
ESCキーを使う各アプリでキーバインドを変更するのも面倒だ。。。
対策
そうだ、仮想コンソールのキーマップを変更しよう。
キーマップは下記手順で変更することができる。
(X Window Systemには影響しない)
/usr/share/vt/keymaps/*の、キーマップファイルを修正kbdcontrol -l xxx.kbdで、期待通り設定できているか確認/etc/rc.confの、PC起動時に使うキーマップファイルを変更
手順1で、今使っているキーマップファイルを上書き変更する場合は、手順3は要らない。
以降はroot権限で実行する前提で説明する。
1. キーマップファイルを修正
まずはキーマップファイルを修正する。
ここではベースとなるキーマップファイルをコピーして、それを修正することにした。
> cd /usr/share/vt/keymaps/ # syscons(4)の場合は /usr/share/syscons/keymaps > cp jp.kbd jp.my.kbd > vim jp.my.kbd
キーマップファイルの中身は下記のようになっている。
# $FreeBSD: releng/12.0/share/vt/keymaps/jp.kbd 270156 2014-08-18 21:07:12Z se $ # alt # scan cntrl alt alt cntrl lock # code base shift cntrl shift alt shift cntrl shift state # ------------------------------------------------------------------ 000 nop nop nop nop nop nop nop nop O 001 esc esc esc esc esc esc debug esc O 002 '1' '!' nop nop '1' '!' nop nop O 003 '2' '"' nop nop '2' '"' nop nop O . . .
各列を左端からざっくり説明すると
- scancode ... キー固有の番号
- base ... キー単独で押したときのアクション
- shift ... キーをShiftキーと一緒に押したときアクション
- cntrlshift ... キーをCtrl+Shiftキーと一緒に押したときのアクション
(〜中略〜)
- lockstate ... キーがCaps Lock / Num Lockの影響を受けるか
みたいな感じ。
変更したいキーが割り当たっている行の各項目を、希望するアクションに変えればいい。
例えば、Ctrl+Shift+1キーでシャットダウンしたいとする。
上記ファイルのscancode列が002の行はbase列が'1'となっているので、数字1キーだということが分かる。
さらにshift列が'!'となっているため、10キーではなくQキーの上の数字1キーだ。
この行のcntrlshift列(左から5列目)のnopをpdwnに変えればいい。
指定できるアクションの種類については、man 5 kbdmap で確認してねと。
僕が使いたくなりそうなものだけ下記に抜粋。
| 記述 | アクション |
|---|---|
| alt, lalt, ralt | Altキー |
| ctrl, lctrl, rctrl | Ctrlキー |
| lshift, rshift | Shiftキー |
| meta | metaキー |
| 'symbol' | 特定の文字('A','1',':' など) |
| hs | Tab |
| btab | Backword Tab |
| bs | Backspace |
| del | Delete |
| cr | Carriage Return (Enter) |
| nl | New Line (デフォルトだとCtrl+Enterに割り当てられてるっぽい) |
| esc | Escape |
| clock | Caps Lock |
| nlock | Num Lock |
| slock | Scroll Lock |
| pdwn | Power Off |
| boot | Reboot |
| susp | Suspend |
| saver | splash/text screen |
| fkeyN | Functionキー(fkey1,fkey2...詳細はman 4 atkbdを参照) |
| paste | 貼り付け(moused有効時の?) |
| nop | 何もしない |
最後のlockstate列には下記が指定できる。
| 記述 | 影響を受けるLock |
|---|---|
| C | Caps Lock |
| N | Num Lock |
| B | Caps & Num Lock (両方) |
| O(英字大文字のオー) | 影響を受けない |
CやBを指定すると、Caps Lock中はshift列に指定したアクションが有効になるっぽい。
Num Lock中は、挙動がよく分からなかった。
知っている方がいたらコメント頂けると助かります。
例 1) CapsLock を ESC へ変更
CapsLockキー単一で押したときにESCとして、Shiftキーと一緒に押したときはCapsLockのままにする。
(その他のキーとの同時押しはESC)
058 clock clock clock clock clock clock clock clock O ↓ 058 esc clock esc esc esc esc esc esc O
例 2) 変換 を Enter、 無変換 を Ctr へ変更l
変換キー、無変換キーがどれなのかマニュアルを読んでもよく分からない。
とりあえず、僕の環境では下記で変更できましたとさ。
121 ' ' ' ' nul ' ' ' ' ' ' susp ' ' O 123 ' ' ' ' nul ' ' ' ' ' ' susp ' ' O ↓ 121 cr cr nl nl cr cr nl nl O 123 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O
2. 期待通り設定できているか確認
キーマップファイルを変更したら、動作確認だ。
下記コマンドを実行すると設定が反映されるので、期待通りのキー割り当てになっているか確認しよう。
> kbdcontrol -l /usr/share/vt/keymaps/jp.my.kbd # 実際に修正したファイルパスを指定
ちなみにuim-fepやtmux上でコマンドを実行するとエラーが出るので、素のvt上で実行してねと。
3. PC起動時に使うキーマップファイルを変更
納得のいくキーマップファイルができたら、PC起動時に自動で反映させよう。
/etc/rc.confのkeymapを下記のように変更すれば良い。
keymap="jp.my.kbd" # 実際に修正したキーマップファイル名を指定
再起動後にキーマップが反映されるようになっているはず。
おまけ
kbdmapコマンドから追加したキーマップファイルを選択できるようにしたい場合は、
/usr/share/vt/keymaps/INDEX.keymapsを修正すればいいみたい。
以上。
