在内核级别捕获按键

在内核级别捕获按键

终端中的按键在哪里被处理/捕获?如果我想修改 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_ctrlF 键定义。

相关内容