多功能 CapsLock 不带 X

多功能 CapsLock 不带 X

我想重新映射CapsLockEsc单独按下时和Ctrl用另一个键按下时不使用 X

这类似于之前的问题(将 CapsLock 重新映射到系统范围内的转义和控制)但我专门寻找一个没有 X 的解决方案。

答案1

Linux 控制台键盘映射

alt要更改虚拟终端 ( + f1- alt+ )的键盘映射,f6请使用 loadkeys。这仅影响虚拟终端登录和不会改变X 或 X 终端应用程序中的键盘映射,例如Xterm或者乌尔克斯VT

loadkeys 命令需要以 root 身份运行,否则您将收到以下错误:
Couldn't get a file descriptor referring to the console

要交换escapecaps_lock您需要执行以下操作:

# echo keycode 58 = Escape | loadkeys -
# echo keycode 1 = Caps_Lock | loadkeys -

另一种选择是将重新映射Caps_Lockshift+ Scroll Lock

# echo keycode 69 = Num_Lock  Caps_Lock | loadkeys -

键映射的格式可能有点令人困惑。它使用一个加权系统,具体取决于按下的修饰符。 (Ctrl、Alt、Shift 等)。作为键盘映射手册页的示例。

keycode 30 = a    A    VoidSymbol    VoidSymbol   VoidSymbol  .....

shift按下 和 a 时,我们会在第二列中执行操作,因为 shift 的权重为 1。control另一方面,shift 的权重为 4。

这可能会在映射修饰符时导致问题。举例来说,如果一个键编码是第一个且唯一的列control作为其操作。现在,自您按下以来的权重现在为 4,当您释放该键时,它control不会显示已释放,因为现在要执行第 5 列操作,但尚未定义操作。所以control钥匙永远不会被释放。

这就是为什么大多数修饰符没有分配其他操作的原因。如果键盘映射中仅定义了一项操作,则该操作将应用于所有操作。

我曾尝试解决这个问题,但只得到了不一致的结果。有时修改器会释放,有时不会。

澄清

更改大写锁定以用作转义或控制功能非常适合此方法。映射到两者,没有那么多。

重要的

如果您搞砸了键盘映射,请执行以下操作来重置它。

# loadkeys -d

参考

答案2

按键模块程序从设备读取键盘事件/dev/input/eventX并使用该设备直接注入回内核/dev/uinput。该caps lock行为很特殊:如果按下并释放该键而不接触另一个键,Esc则会将一个键发送到内核中。如果在按住 的同时按下另一个键,则会模拟caps lock按住(左)键。control

由于程序控制指定的事件设备,因此在测试时能够使用 SSH 等访问计算机会非常方便。例如,暂停该程序(例如使用 ctrl-z)将确保您无法再使用键盘(它已完全控制它,现在不再处于活动状态)。

相关内容