虚拟终端中的键盘快捷键

虚拟终端中的键盘快捷键

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

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


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


示例用例

  1. 我正在控制台中浏览网页links,我想调低屏幕亮度。我按Fn+ End,它恰好是亮度降低键并生成单个键代码,并且运行一个程序,该程序通过在文件中写入某些内容来降低亮度/sys
  2. 我在控制台文本编辑器中,正在听一些正在播放的背景音乐mpd。我按下(播放/暂停)键,它再次产生一个键码,并且具有执行发送信号以mpd暂停当前歌曲的程序的效果。

解决方案

下列的德克特的想法使用/dev/input,我创建了埃维德(事件守护进程)用于此目的。该应用程序可以在后台启动,无论您身在何处,包括登录前和 X 内,它都会接管键盘。

答案1

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

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

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

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


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

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

相关内容