有没有办法让我的二进制文件对 Linux 中的某些全局热键做出反应?

StackOverflow https://stackoverflow.com/questions/74790

  •  09-06-2019
  •  | 
  •  

是否可以监听某个热键(例如:控制键-)然后执行特定操作?我的应用程序是用 C 编写的,只能在 Linux 上运行,并且没有 GUI。有没有任何库可以帮助完成此类任务?

编辑:例如,amarok 具有全局快捷键,因此,例如,如果您将按键组合映射到操作(假设 控制键-+, 控制键+)您可以在按下按键时执行该操作。如果我会绘制地图 控制键-+ 到音量增加动作,每次我按 控制键-+ 音量应增加一定量。

谢谢

有帮助吗?

解决方案

您的热键需要有多全局?对于 X 会话来说,它们是否足够全球化?在这种情况下,您应该能够打开 Xlib 连接并侦听您需要的事件。

通常,X 中的键盘事件会传递到当前具有焦点的窗口,并沿层次结构向上传播,直到它们被处理。显然这不是我们想要的。我们需要在任何其他窗口访问该事件之前处理该事件。我们需要打电话 XGrabKey 在根窗口上使用热键的键码和修饰符来完成此操作。

我找到了一个很好的例子 这里.

其他提示

我认为 斯穆夫拉 这里是在正确的轨道上;您希望向 X 注册一个全局热键,以便您可以拦截按键并采取适当的操作。 扩展库 可能是你想要的,并且 XGrabKey 我认为是函数。

恐怕学起来并不容易;我确实找到了这个似乎有用的示例: 小WM. 。我还找到了一个 例子 使用 Java/JNI(访问相同的底层 Xlib 函数)。

你应该看看源代码 xbindkeys.

Xlib 编程相当晦涩难懂,文档很难找到,并且存在微妙的可移植性问题。复制一些久经考验的代码会更好。

一种方法是让您的应用程序在某个端口或套接字文件上侦听传入的请求。

然后,您可以编写一个小型客户端应用程序,连接到该端口或套接字文件并向正在运行的应用程序发送命令。

然后,您可以配置窗口管理器以绑定某些组合键来启动小型客户端应用程序。

在 UNIX 中,您可以通过 终端. 。这让人回想起人们通过直接连接到机器的终端(例如,计算机)访问大型共享计算机的时代。通过串行电缆)。

事实上,“xterm”程序或您在 UNIX 机器上使用的任何衍生程序都被正确地称为 终端仿真器 - 它的行为(从您的角度和操作系统的角度来看)非常像那些老式终端机之一。

这使得以有趣的方式处理输入变得稍微复杂,因为有许多不同类型的终端,并且您的 UNIX 系统必须了解每种终端的功能。这些功能传统上存储在 术语帽 文件,我认为更现代的系统使用 术语信息 反而。尝试

man 5 terminfo

在 Linux 系统上了解更多信息。

现在,好消息是您不需要对终端功能等做太多的事情。拥有一个命令行应用程序,可以通过输入或窗口功能执行有趣的操作。有一个图书馆, 咒骂, ,这会有帮助。抬头

man 3 ncurses

在您的 Linux 系统上了解更多信息。您可能能够在网上找到有关使用 Curses 的不错的教程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top