虚拟终端中的键盘快捷键

rid*_*rid 8 linux keyboard-shortcuts terminal tty

有没有办法在 Linux 虚拟控制台中配置键盘快捷键?

例如,如果我转到 tty1 然后按组合键Ctrl+ Alt+ H,我希望脚本/usr/bin/hello.sh被执行。


理想情况下,该快捷方式甚至在登录之前就可用(在这种情况下,它将使用我指定的用户权限执行)。如果这是完成此操作的唯一方法,我也不介意修改内核。此外,它不必是一个 shell 脚本,它也可以是一个普通的 ELF 二进制文件,甚至是一个进行系统调用的内核模块。


示例用例

  1. 我在控制台中并使用类似的东西浏览网页,links我想调低屏幕亮度。我按下Fn+ End,这恰好是降低亮度的键并产生一个单一的键码,然后运行一个程序,通过在/sys文件中写入一些东西来降低亮度。
  2. 我在控制台文本编辑器中,并在后台播放mpd. 我按下?(播放/暂停)键,它再次产生一个单一的键码,它的作用是执行一个程序,该程序发送一个信号mpd来暂停当前歌曲。

解决方案

遵循dirkt 的使用想法/dev/input,我为此创建了evd(事件守护进程)。该应用程序可以在后台启动,无论您身在何处,都将接管键盘,包括登录前和 X 内。

dir*_*rkt 3

部分答案(因为它只是一个大纲,未经测试):

编写一个恶魔,它监听与/dev/input您的主键盘相对应的任何设备(有符号链接,看看它们)。以您指定的用户身份启动该恶魔,使用您拥有的任何初始化系统(systemd、sysv 等)。

该恶魔按照input-events-codes.h中的定义处理关键事件(或查看 的源代码evtest)。它有一个状态机,可以识别您所需的按键序列,并在完成此类序列时生成您指定的任何进程。

这应该在您登录之前可用,并且始终以同一用户身份执行,无论您在虚拟控制台上登录哪个用户。它还将在 X 下以同一用户身份执行。


或者,如果您想在 shell 中执行某些操作:使用tmux或类似的程序,可以将按键序列绑定到操作。tmux我想每当您在虚拟控制台登录时也应该可以自动启动并附加到新会话,但我还没有研究过这一点。

这在登录之前不起作用,但也可以在具有键盘焦点的图形终端模拟器中起作用,并且将以登录用户的身份执行脚本。