我已经了解如何在 X 图形服务器中重新映射键。然而,我有时喜欢通过 TTY 进行工作,但似乎无法找到一种在功能上重新映射Ctrl
到Caps 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
文件(您将需要超级用户权限),这应该类似于以下内容keymap
hooks
...
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 Lock:Ctrl
keycode 58 = Control