可能重复:
如何在 Ubuntu 的后台进程中获取数据
我正在编写一个程序来监视键盘上按下的键。但是我的程序可能在前台或后台运行。我听说有操作系统特定的系统调用,即使运行系统调用的程序在后台,程序员也可以监控键盘活动。我是 Ubuntu 编程的新手,所以请有人告诉我那个操作系统系统调用是什么。
注意: 此程序仅用于教育目的。这是学校项目的一部分..
问候
大多数 Ubuntu 系统(至少是 Ubuntu 新手用户的桌面)都在运行X11窗口服务器(如Xorg)。该服务器(仅)正在获取原始键盘和鼠标设备输入。它处理它们以将X11 协议事件传递给客户端应用程序(例如,您的 firefox 浏览器、emacs
编辑器、gnome 或xterm
终端)。
您可以花时间(几个月)了解所有这些(可能从freedesktop开始)您也可以切换到其他项目,也许只是使用Gtk(在 Gnome 中)或Qt(在 KDE 中)编写一个有趣的 GUI 应用程序。所有 Linux 图形工具包库都构建在与 X11 协议接口的库之上,通常是Xlib或XCB。
如果您想开始学习 Linux 编程,请阅读Advanced Unix Programming和Advanced Linux Programming。之后,花大量时间了解tty -s 的奥秘,熟悉syscalls(2)。然后熟悉像 Qt 或GTK这样的图形工具包。
然后你就会开始明白要准确回答你问得不好和可疑的问题是多么困难。(答案很大程度上取决于观点 -Xorg
看到与其他应用程序不同的关键事件,特别是 X 客户端,并且非常复杂)。
一旦你理解了我给你的链接中的所有概念,你就可以更准确地提出你的问题。当您以更精确和技术性的术语重新提出您的问题时(特别是解释您希望在哪个级别监控键盘和鼠标),显示您试验过的代码,我们将能够(并且愿意)回答你。
有一个用于 linux 的程序,它绑定全局热键并在按键时执行预定义的操作。它被称为xbindkeys
。查看其源代码以获取建议或直接使用它。
听说有特定于操作系统的系统调用:你从谁那里听到的?你问他们了吗?
这需要多次调用,您需要使用ioctl
(在 Ubuntu 上可能不同)将您的记录器推送到终端流中。这并不简单,也不太适合刚开始的项目。例如,请参阅script
程序。