通过 scancode-keycode-remapping 重新映射(内核端)

通过 scancode-keycode-remapping 重新映射(内核端)

我的新键盘的设计人员由于某些原因决定将 PrintScreen 键放在AltGr和之间RCtrl

所以现在我遇到了这个问题:我喜欢有神奇的 SysRq 键可用,因为它时不时有用。但现在我例如将AltGr+k映射到downarrow,而刚才当我想使用此downarrow组合时,我不小心按了AltGr+ PrintScreen+k,所有程序都被终止了。这非常烦人。

有没有办法将 sysrq 重新映射到其他地方?比如AltGr+delete之类的。

答案1

我刚刚在新笔记本电脑上遇到了这个问题。我的解决方案是drivers/tty/sysrq.c在内核中添加补丁

#undef KEY_SYSRQ
#define KEY_SYSRQ KEY_VOLUMEDOWN

紧跟在所有#includes 之后。如果音量减小键不适合您,您可以在 中找到其他键码include/uapi/linux/input-event-codes.h

/proc/sys/kernel/sysrq我不认为有任何方法可以在不修改内核的情况下进行重新映射。如果那不是一个选择,至少可以使用内核的 sysrq 文档禁用更危险的请求:

echo 0x1A >/proc/sys/kernel/sysrq

这仅允许控制日志记录级别、进程转储和同步。大多数其他类别可能会在意外触发后中断您的工作。

答案2

通过 scancode-keycode-remapping 重新映射(内核端)

通过 udev:

另一种方法可能是将扫描码重新映射到键码。/lib/udev/hwdb.d/60-keyboard.hwdb在我的系统上给出了关于如何操作的很好的介绍(它有详细的文档),或者:例如,你可以阅读这里所以我创建了一个文件94-gpd-micropc-keyboard.hwdb对于我的计算机,其中包含

[...]
evdev:atkbd:dmi:bvn*:bvr*:bd*:br*:efr*:svnGPD:pnMicroPC:*
  KEYBOARD_KEY_36=sysrq  # Right Shift -> SysRq
[...]

(看完整文件更多通用文档请参见评论)

然后我运行udevadm --debug hwdb --updateudevadm trigger /dev/input/<my-input-device>加载它而无需重新启动。

现在右移键是 SysRq 键并且它作为 SysRq 工作,而不对内核的代码做任何处理。

笔记:

  • 使用evdev:*-line可以对应该应用设置的键盘进行微调。

无需 udev,直接通过setkeycodes

还有一个不涉及 udev 的选项,通过setkeycodes,你可以从 推断出你需要什么showkey -s。(仅限于 Linux 文本控制台,不在 X Server 中,可能也不在 wayland 中。)

笔记:

  • 这适用于所有 AT/PS/2 连接的键盘,
  • 这似乎忽略了 USB 连接的键盘。

要取消映射原始 SysRq 键,将 SysRq 键映射到其他键的方法也是一样的。由于我没有物理 SysRq 键,因此无法通过showkey( setkeycodes-method) 或evtest(udev-method) 测试和查询其扫描码。


我实际上希望 SysRq 仅在按下修饰键(例如<Ctrl>+ )时才被注册,<Right Shift>这样“正常”的右移仍然保持不变。有没有什么想法可以在不更改键盘控制器固件的情况下实现这一点?

答案3

答案取决于您是否正在运行 X(当前一代 GUI 桌面)。您没有指定。

正在运行X:

有几种方法可以解决这个问题。

最精确/最有限的方法是使用xmodmap。我没有用过,所以不熟悉细节。它会将具有特定键代码的键重新映射到特定的键符号。

如果您在整理东西时遇到麻烦,请运行xev。当您按下任何组合键(或执行其他 X 操作)时,xev将告诉您系统看到了什么,这将为您提供所需的值xmodmap

一旦命令开始工作,您就可以从脚本中运行它,~/.login这样当您启动交互式 shell 时它就在那里。或者,您可以将其作为 bash 脚本添加到桌面环境的自动启动系统中。

如果您想做更多,您可能需要查看AutoKey哪个是桌面自动化工具。除其他功能外,您可以定义一个宏,该宏将由简单或复合按键触发,它可以执行任何操作,从发出另一个按键到运行用 Python 编码的复杂宏,它可以执行几乎任何您能想到的操作 - 如果您对 Python 有足够的了解。

我每天都用它并且很喜欢它。

对于类似更简单的事情,请查看xdotool。它还可以做一些AutoKey目前无法做到的事情 - 比如发出鼠标事件。

没有运行 X(服务器安装等):

由于这种情况不太常见,因此很难找到相关信息。

我从未尝试过,但我确实找到了一些相关信息这里昨天回答了另一个问题。

相关内容