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

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

编辑:例如,amarok具有全局快捷键,因此,例如,如果您将一个组合键映射到一个操作(让我们说Ctrl-+Ctrl+),您可以在按下键时执行该操作。如果我将Ctrl-+映射到音量增加动作,每次我按Ctrl-+,音量应该增加一定数量。

谢谢

请先 登录 后评论
本文连接: http://www.china-sunrider.com.cn/question/8590
source: https://stackoverflow.com/questions

5 个回答

smoofra

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

通常情况下,X中的键盘事件被传递到当前具有焦点的窗口,并沿着层次结构向上传播,直到它们被处理。显然这不是我们想要的。我们需要在其他窗口获取事件之前处理该事件。我们需要用热键的keycode和修饰符在根窗口上调用XGrabKey来实现这一点。

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

请先 登录 后评论
Incident

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

事实上,您在UNIX机器上使用的“xterm”程序或任何派生程序都被恰当地称为终端模拟器——它的行为(从您和操作系统的角度来看)非常像老式的终端机器。

这使得以有趣的方式处理输入变得有点复杂,因为有很多不同类型的终端,您的UNIX系统必须了解每种终端的功能。这些功能传统上存储在termcap文件中,我认为更现代的系统使用terminfo代替。试一试

man 5 terminfo

以获取更多信息。

现在,好消息是你不需要在终端功能等方面做太多的事情,就可以让一个命令行应用程序用输入或窗口功能做一些有趣的事情。有个图书馆,咒语,会有用的。查找

man 3 ncurses

以获取更多信息。你可能会在网上找到一个不错的使用诅咒的教程。

请先 登录 后评论
Chris AtLee

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

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

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

请先 登录 后评论
zweiterlinde

我认为smoofra在这方面是正确的;你想要注册一个全局热键到X,这样你就可以拦截按键并采取适当的行动。Xlib可能是你想要的,XGrabKey是函数,我认为。

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

请先 登录 后评论
ddaa

您应该查看xbindkeys的源代码。

Xlib编程相当神秘,文档很难找到,还有一些微妙的可移植性问题。最好复制一些久经考验的代码。

请先 登录 后评论
user contributions licensed under CC BY-SA.