代码之家  ›  专栏  ›  技术社区  ›  Vhaerun

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

  •  3
  • Vhaerun  · 技术社区  · 17 年前

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

    EDIT:例如,amarok有全局快捷键,所以如果你将一组键映射到一个动作(比如说 Ctrl键 - + , Ctrl键 + )你可以在按键时执行该操作。如果我能绘制地图 Ctrl键 - + 每次按下时,音量都会增加 - + 音量应该增加一定量。

    谢谢

    5 回复  |  直到 8 年前
        1
  •  4
  •   Arnab Nandy    10 年前

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

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

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

        2
  •  3
  •   Community CDub    8 年前

    我认为 smoofra 在这方面走在正确的轨道上;您希望在X中注册一个全局热键,以便拦截按键并采取适当的操作。 Xlib 这可能是你想要的,而且 XGrabKey 我认为是功能。

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

        3
  •  2
  •   ddaa    17 年前

    你应该看看源代码 xbindkeys .

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

        4
  •  1
  •   Chris AtLee    17 年前

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

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

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

        5
  •  0
  •   Incident    17 年前

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

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

    这使得以有趣的方式处理输入有点复杂,因为有很多不同类型的终端,你的UNIX系统必须知道每种终端的功能。这些功能传统上存储在 终端机处理能力 文件,我认为更现代的系统使用 术语 相反。尝试

    man 5 terminfo
    

    在Linux系统上获取更多信息。

    现在,好消息是,你不需要对终端功能等做太多的改动,就可以拥有一个用输入或窗口功能做有趣事情的命令行应用程序。有一个图书馆, ,这将有所帮助。查找

    man 3 ncurses
    

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