TTYでCtrlをCaps Lockに再マップするには?

TTYでCtrlをCaps Lockに再マップするには?

Xグラフィックサーバーでキーを再マップする方法を見つけました。しかし、時にはTTYを介して作業したいが、機能的CtrlCaps Lock

.keymap次の内容でファイルを作成してみました。

keycode 37 = Control_L

その後、ソーシングを使用しますが、loadkeys役に立ちません。

しかし、Xの37キーコードはCtrl(によってxmodmap -pke | grep 'Control')TTYのキーコードが異なる可能性がありますか?それでは、正しいキーコードをどのように決定し、その後再マッピングを設定しますか?

答え1

上記のPorkfreezerの答えは素晴らしいです!これを永続的なソリューションにするには、ディレクトリを作成するか、ディレクトリを使用して.settingsTTY.localにログインするときに使用できる独自のキーマップファイルを作成できます。これを行うには、現在使用しているキーボードキーマップ(私の場合us.map.gz)を上記で選択したホームディレクトリにコピーすることをお勧めします。私には次のようになります。

cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz ~/.settings/

その後、必要なキーマッピングを含むようにファイルを解凍して編集できます。私はVimで動作するようにEscキーとCaps_Lockを切り替えました。次に、次のように、Linuxが見つけることができるディレクトリのファイルを指すシンボリックリンクを作成します。

sudo ln -s ~/.settings/custom.map /usr/share/kbd/keymaps/i386/qwerty/custom.map

これで、TTYにいる間に実行してsudo loadkeys customキーマップをロードできます。これをデフォルトにするには

/etc/vconsole.conf

この行を含むファイル

KEYMAP=custom

/etc/mkinitcpio.conf次に、リストの最後に追加してファイルを編集します(スーパーユーザー権限が必要です)。これは次のようになります。keymaphooks

...
HOOKS=(base udev autodetect modconf block filesystems keyboard fsck keymap)
...

その後実行

sudo mkinitcpio -p linux

それだけです!再起動後、TTYにログインするたびにカスタムキーマップが使用されます。

役に立ったことを願っています!

答え2

カーネルキーコードはXキーコードとは異なります。カーネルのキー37は実際にはK(qwertyにあります)です。カーネルキーコードを見つけるには、次のものを使用できますshowkey

$ showkey
kb mode was UNICODE
[ if you are using this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
keycode  28 release    # I released enter
keycode  29 press      # I pressed control
keycode  29 release    # I released control
keycode  58 press      # I pressed caps lock
keycode  58 release    # I released caps lock

したがって、マッピングするには、次のようにCtrlしますCaps Lock

keycode 29 = Caps_Lock

または:Caps LockCtrl

keycode 58 = Control

関連情報