终端中的按键在哪里被处理/捕获?如果我想修改 Alt + F# 组合键的行为(以切换 vterm),该组合键在哪里处理?
答案1
内核虚拟终端中的控制台切换功能在内核内置终端仿真器中定义(drivers/tty/vt/keyboard.c
在内核源代码树中)并由内核键映射中的组合键触发(drivers/tty/vt/defkeymap.map
)。您的系统可能在/usr/share/kbd/keymaps
.
如果您希望以某种方式修改切换行为,这将需要破解内核代码并编译您自己的修补内核。
如果您只想更改按键组合,则可以创建自己的键盘映射并使用该loadkeys
实用程序进行安装。从您喜欢的键盘映射开始,然后更改符号的定义Console_N
(以及相关的Last_Console
, Decr_Console
, Incr_Console
):
#...
keycode 59 = F1 F11 Console_13
control keycode 59 = F1
alt keycode 59 = Console_1
control alt keycode 59 = Console_1
keycode 60 = F2 F12 Console_14
control keycode 60 = F2
alt keycode 60 = Console_2
control alt keycode 60 = Console_2
#...
请注意,这仅影响内核的内置终端仿真器,这意味着仅内置虚拟控制台受到影响。 X11、Wayland 和类似的上下文使用 XKB 来实现类似的功能。在 XKB 中,请参阅/usr/share/X11/xkb/compat/xfree86
参考资料 解释的操作、使用的.../xkb/types/pc
类型CTRL+ALT
以及.../xkb/symbols/srvr_ctrl
F 键定义。