コンソールでの特別なキーボードキー

提供: ArchWiki
移動先: 案内検索

コンソールを使用するときは、ホットキーを使って特殊な文字を打ち込むことができます。さらに、一連の文字列やエスケープシーケンスを入力することも可能です。従って、コマンドと改行のエスケープ文字からなる文字列を連続して打ち込んだ場合、コマンドが実行されます。

これを行うにはキーマップを編集するのが一つの方法ですが、キーマップは要注意のファイルであり、キーマップが入っているパッケージが更新されると書きなおされてしまいます。そのためファイルの編集は推奨されません。個人的なキーマップと既存のキーマップを統合するほうが良いでしょう。loadkeys ユーティリティを使います。

カスタムキーマップの作成

まず、キーマップファイルを作成してください。キーマップファイルはどこに置いてもかまいませんが、/usr/local のディレクトリ階層を真似るという方法があります:

# mkdir -p /usr/local/share/kbd/keymaps
# vim /usr/local/share/kbd/keymaps/personal.map

自分用のキーマップを使って、デフォルトのキーマップで既に定義済みのキーの挙動を再定義することも可能です。loadkeys でキーマップをロードしたときに、新しいディレクティブでキーマップが衝突する場合、既存のキーマップのディレクティブが置き換わります。自分用のキーマップに定義する必要があるのは変更したいキーだけで十分です。

ヒント: /usr/share/kbd/keymaps/ ディレクトリツリーに存在する既存のキーマップを編集することもできます。キーマップの拡張子は .map.gz となっており、例えばアメリカ英語のキーマップは us.map.gz です。キーマップを /usr/local/share/kbd/keymaps/personal.map.gz にコピーして gunzip を実行してください。

ディレクティブの追加

自分用キーマップには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.confKEYMAP 変数にファイルのフルパスを指定してください。kbd に含まれている公式キーマップと同じようにファイルを gzip で圧縮する必要はありません。