如何在不在屏幕上书写的情况下捕获键盘输入

时间:2013-01-19 14:22:08

标签: linux keyboard debian capture

我正在为Debian Linux编写ANSI C应用程序,它从USB键盘捕获数据并通过RS232端口和LAN(它是某种工业机器)发送一些数据。没有连接到PC的屏幕。 我使用" / dev / input / event1"一切正常,但启动后计算机显示系统登录/通过提示,键盘由我的应用程序捕获,但也通过系统登录。我的问题是如何通过系统禁用捕获键盘进行登录,但是使用我的应用程序继续运行?

1 个答案:

答案 0 :(得分:3)

您面临的问题是,默认情况下,设备的所有输入事件处理程序都会收到所有事件。您的案例至少有两个处理程序:控制台的键盘驱动程序和应用程序的evdev用户空间界面。

为了避免这种情况,您的应用程序应该指示evdev模块抓取输入设备,以便EVIOCGRAB ioctl专用。这将阻止任何其他处理程序(包括其他用户空间应用程序)从该设备接收任何事件。

抓住设备:

int ret = ioctl(fd, EVIOCGRAB, (void *)1);

要发布抓取的设备:

int ret = ioctl(fd, EVIOCGRAB, (void *)0);