コンソールでの特別なキーボードキー
コンソールを使用するときは、ホットキーを使って特殊な文字を打ち込むことができます。さらに、一連の文字列やエスケープシーケンスを入力することも可能です。従って、コマンドと改行のエスケープ文字からなる文字列を連続して打ち込んだ場合、コマンドが実行されます。
これを行うにはキーマップを編集するのが一つの方法ですが、キーマップは要注意のファイルであり、キーマップが入っているパッケージが更新されると書きなおされてしまいます。そのためファイルの編集は推奨されません。個人的なキーマップと既存のキーマップを統合するほうが良いでしょう。loadkeys
ユーティリティを使います。
カスタムキーマップの作成
まず、キーマップファイルを作成してください。キーマップファイルはどこに置いてもかまいませんが、/usr/local
のディレクトリ階層を真似るという方法があります:
# mkdir -p /usr/local/share/kbd/keymaps # vim /usr/local/share/kbd/keymaps/personal.map
自分用のキーマップを使って、デフォルトのキーマップで既に定義済みのキーの挙動を再定義することも可能です。loadkeys
でキーマップをロードしたときに、新しいディレクティブでキーマップが衝突する場合、既存のキーマップのディレクティブが置き換わります。自分用のキーマップに定義する必要があるのは変更したいキーだけで十分です。
ディレクティブの追加
自分用キーマップには2種類のディレクティブが必要です。まず、既存のキーマップにあるフォーマットにマッチするキーコードディレクティブです。キーコードディレクティブはキーコードをキーシムと関連付けます。キーシムはキーボードのアクションを表します。文字コードや文字シーケンスの出力、コンソールやキーマップの切り替え、マシンの起動などのアクションが定義できます。完全なリストは以下のコマンドで確認できます:
# dumpkeys -l
ほとんどのキーシムはすぐにわかります。例えば、キー 112 で 'e' が出るように設定する場合、ディレクティブは以下のようになります:
keycode 112 = e
キー 112 でユーロ記号が出力されるようにするには、以下のディレクティブを使用:
keycode 112 = euro
一部のキーシムはキーボードのアクションとすぐにはつながりません。特に、大文字の F と1〜3桁の数字からなるキーシム (F1-F246) で数字が30以上のものは自由に使うことができ、一連の文字列やアクションを出力するホットキーとして有用です:
keycode 112 = F70
上記のように定義してから F70 で特定の文字列を出力するように設定できます:
string F70 = "Hello"
キー 112 が押されると、F70 の中身が出力されます。ターミナルで出力したコマンドを実行するには、コマンド文字列の末尾に改行のエスケープ文字を追加してください。例えば、ハイバネートを実行したい場合、以下のキーシムを追加します:
string F70 = "sudo /usr/sbin/hibernate\n"
その他の例
- (Emacs 用に) 右 Alt キーを左 Alt キーと同じにしたい場合、キーマップに以下の行を書いてください。
/usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc
ファイルが読み込まれます:
include "linux-with-two-alt-keys"
- (Vim 用に) CapsLock と Escape を交換するには、以下のキーコードをリマップしてください:
keycode 1 = Caps_Lock keycode 58 = Escape
- CapsLock を Control キーとして使うには、以下のキーコードをリマップします:
keycode 58 = Control
- CapsLock を左 Control キーと交換するには、それぞれのキーマップを再マッピングしてください:
keycode 29 = Caps_Lock keycode 58 = Control
変更の保存
作成したキーマップを使うには loadkeys でロードする必要があります:
$ loadkeys /usr/local/share/kbd/keymaps/personal.map
ただし上記のコマンドでロードされたキーマップは現在のセッションにおいてのみしか有効になりません。起動時にキーマップをロードするには、/etc/vconsole.conf の KEYMAP
変数にファイルのフルパスを指定してください。kbd に含まれている公式キーマップと同じようにファイルを gzip で圧縮する必要はありません。