確認環境
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
を修正すればいいみたい。
以上。