如何在 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的回答太棒了!为了使其成为永久解决方案,您可以创建一个.settings目录,或使用您的.local目录来创建您自己的键盘映射文件,就像您尝试做的那样,该文件可以在登录 TTY 时使用。为此,我建议将您当前使用的键盘键映射(对我来说是us.map.gz)复制到您在上面选择的主目录,对我来说这看起来像

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

然后您可以解压缩并编辑该文件以包含所需的键映射。对我来说,我已经切换了 Escape 键和 Caps_Lock,以便与 vim 一起使用。然后创建一个指向该文件的符号链接到 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

因此,要映射CtrlCaps Lock

keycode 29 = Caps_Lock

或者Caps LockCtrl

keycode 58 = Control

相关内容