Linux コンソール/キーボード設定
仮想コンソールのキーボードマッピング (keymap) やコンソールフォント、コンソールマップは kbd パッケージ (既にインストールされているはずです) によって提供されています。このパッケージには仮想コンソールを管理するための低水準なツールも多く含まれています。さらに、systemd は localectl ツールも提供しています。これはシステムロケールとキーボードレイアウトの設定を仮想コンソールと Xorg の両方を制御できます。
目次
キーボード設定の表示
localectl status
を使って、キーボード設定を表示することができます。
キーマップ
キーマップファイルは、/usr/share/kbd/keymaps/
ディレクトリツリーに格納されています。通常、一つのキーマップファイルは、一つのキーボードレイアウトに対応しています。(include
ステートメントを使用して共通部分を共有したり、キーマップファイルに複数のレイアウトと切り替え用のキーの組み合せを含めることができます)。詳細は、keymaps(5) を参照してください。
キーマップの一覧表示
複数のコンポーネントによって構成されている XKB キーボードレイアウトとは異なり、仮想コンソールのキーボードレイアウトはコンポーネントがひとつしかありません。基本的にはひとつの keymap ファイルがひとつのキーボードレイアウトに対応しています (include ステートメントを使って共有の部分を共有することで keymap ファイルには複数のレイアウトを含めることができます)。keymap ファイルは /usr/share/kbd/keymaps/
ディレクトリツリーに保存されています。次のコマンドを使うことで利用可能な全てのキーマップを表示できます:
$ localectl list-keymaps
コンソールキーマップの命名規則は厳格には定まっていませんが、一般的には 2-letter country code と variant をスラッシュ (-
) かアンダースコア (_
) で区切った名前が付けられています。
find を使ってキーマップを調べることもできます:
$ find /usr/share/kbd/keymaps/ -type f
Loadkeys
現在のセッションでのみ有効なキーマップを設定することもできます。異なるキーマップを試したり、問題を解決したりするときに有用です。
一時的な設定を行うには loadkeys ツールを使います。このツールは systemd によって /etc/vconsole.conf
に設定されたキーマップをロードするために内部的に使用されています。とても簡単に使えます:
# loadkeys keymap
詳しくは man 1 loadkeys
を参照してください。
永続的な設定
高度な設定を /etc/vconsole.conf
ですることができ、起動時に systemd によって読み込まれます。KEYMAP
変数がキーマップの指定に使用されます。変数が空だったり設定されていない場合、デフォルトの値として us
キーマップが使われます。全てのオプションは man 5 vconsole.conf
を見て下さい。例:
/etc/vconsole.conf
KEYMAP=jp106 ...
localectl を使ってコンソールのキーマップを設定することも可能です。コマンドを実行することで /etc/vconsole.conf
内の KEYMAP
変数が変更され現在のセッションのキーマップが設定されます。例:
$ localectl set-keymap --no-convert jp106
詳しくは man 1 localectl
を参照してください。
カスタムキーマップの作成
コンソールを使用する場合、ホットキーを使用して特定の文字を表示できます。 さらに、文字のシーケンスといくつかのエスケープシーケンスを表示することもできます。 したがって、コマンドを構成する文字のシーケンスを出力し、その後に改行のエスケープ文字を出力すると、そのコマンドが実行されます。
これを行う1つの方法は、キーマップファイルを編集することです。 ただし、それが属するパッケージが更新されるたびに書き換えられるため、このファイルを編集することはお勧めしません。 既存のキーマップを個人のキーマップと統合することをお勧めします。 loadkeys
ユーティリティはこれを行うことができます。
まず、キーマップファイルを作成します。 このキーマップファイルはどこにあってもかまいませんが、1つの方法は、/ usr/local
のディレクトリ階層を模倣することです。
# mkdir -p /usr/local/share/kbd/keymaps # vim /usr/local/share/kbd/keymaps/personal.map
ちなみに、このような個人用キーマップは、デフォルトのキーマップですでに扱われているキーの動作を再定義する場合にも役立ちます。loadkeys
をロードすると、それらが新しい命令と競合する場合はデフォルトキーマップの命令が置き換えら 、それ以外の場合はそのまま保持されます。 このように、そのキーマップへの変更のみをパーソナルキーマップで指定する必要があります。
命令を追加する
このパーソナルキーマップには、2種類の命令が必要です。 まず、keycode命令、これは、デフォルトのキーマップに表示される形式と一致します。 これらの命令は、キーコードをkeysymに関連付けます。 Keysymはキーボードアクションを表します。 使用可能なアクションには、文字コードまたは文字シーケンスの出力、コンソールまたはキーマップの切り替え、マシンの起動、およびその他の多くのアクションが含まれます。 現在アクティブな完全なキーマップは、次のコマンドで取得できます。
# dumpkeys -l
ほとんどのkeysymは直感的です。 たとえば、キー112でもって「e」を出力するように設定するには、命令は次のようになります。
keycode 112 = e
キー112でもってユーロ記号を出力するように設定するには、ディレクティブは次のようになります。
keycode 112 = euro
一部のkeysymは、キーボードアクションにすぐには接続されません。 特に、大文字のFと30より大きい数からなる1〜3桁の数字(F1〜F246)が前に付いたキー記号は、常にフリーです。 これは、一連の文字やその他のアクションを出力するようにホットキーに指示するのに便利です。
keycode 112 = F70
次に、F70をバインドして特定の文字列を出力できます。
string F70 = "Hello"
キー112を押すと、F70の内容が出力されます。 ターミナルに表示されたコマンドを実行するには、コマンド文字列の最後に改行エスケープ文字を追加する必要があります。 たとえば、システムを休止状態にするためには、次のキーマップを追加します。
string F70 = "sudo systemctl hibernate\n"
その他の例
- To make the Right Alt key same as Left Alt key (for Emacs), use the following line in your keymap. It will include the file
/usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc
, check it for details.
include "linux-with-two-alt-keys"
- To swap CapsLock with Escape (for Vim), remap the respective keycodes:
keycode 1 = Caps_Lock keycode 58 = Escape
- To make CapsLock another Control key, remap the respective keycode:
keycode 58 = Control
- CapsLock と左コントロールを交換するには、それぞれのキーコードをリマップします。
keycode 29 = Caps_Lock keycode 58 = Control
Saving changes
In order to make use of the personal keymap, it must be loaded with loadkeys:
# loadkeys /usr/local/share/kbd/keymaps/personal.map
However this keymap is only active for the current session. In order to load the keymap at boot, specify the full path to the file in the KEYMAP
variable in /etc/vconsole.conf. The file does not have to be gzipped as the official keymaps provided by kbd.
typematic delay と rate の調整
typematic delay はキーリピートを始めるのにキーを押し続ける必要がある時間 (ミリ秒) を表します。キーリピートが開始されると、typematic rate によって指定された頻度 (Hz) で文字が繰り返されます。これらの値は kbdrate コマンドを使うことで変更できます:
# kbdrate [-d delay] [-r rate]
例えば typematic delay を 200ms に typematic rate を 30Hz に設定するには、次のコマンドを実行します:
# kbdrate -d 200 -r 30
delay や rate の値を指定しないでコマンドを実行することで typematic の値をデフォルト (delay は 250ms で rate は 11Hz) に戻すことができます:
# kbdrate
Xorg で設定したい場合は Xorg でのキーボード設定#typematic delay と rate の調整を見てください。
Systemd サービス
systemd サービスを使ってキーボードレートを設定することもできます。例:
/etc/systemd/system/kbdrate.service
[Unit] Description=Keyboard repeat rate in tty. [Service] Type=oneshot RemainAfterExit=yes StandardInput=tty StandardOutput=tty ExecStart=/usr/bin/kbdrate -s -d 450 -r 60 [Install] WantedBy=multi-user.target