我的新键盘的设计人员由于某些原因决定将 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
紧跟在所有#include
s 之后。如果音量减小键不适合您,您可以在 中找到其他键码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 --update
并udevadm 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(服务器安装等):
由于这种情况不太常见,因此很难找到相关信息。
我从未尝试过,但我确实找到了一些相关信息这里昨天回答了另一个问题。