不带 X 的多功能 CapsLock

Cas*_*son 6 linux keyboard console keyboard-layout

我想重新映射CapsLockEsc当单独按下时以及Ctrl不使用 X 的情况下用另一个键按下时。

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

rki*_*ing 5

Linux 控制台键盘映射

要更改虚拟终端 ( alt+ f1- alt+ f6)的键盘映射,请使用 loadkeys。这仅影响虚拟终端登录,不会更改X 或 X 终端应用程序(如Xtermurxvt )中的键盘映射

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 -
Run Code Online (Sandbox Code Playgroud)

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

# echo keycode 69 = Num_Lock  Caps_Lock | loadkeys -
Run Code Online (Sandbox Code Playgroud)

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

keycode 30 = a    A    VoidSymbol    VoidSymbol   VoidSymbol  .....
Run Code Online (Sandbox Code Playgroud)

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

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

这就是为什么大多数修饰符没有分配其他动作的原因。如果在键盘映射中只定义了一个动作,那么它会应用于所有动作。

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

澄清

更改 Caps Lock 以作为转义或控制执行此方法效果很好。映射到两者,不是那么多。

重要的

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

# loadkeys -d
Run Code Online (Sandbox Code Playgroud)

参考


brm*_*brm 3

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

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