我正在为Debian Linux编写ANSI C应用程序,它从USB键盘捕获数据并通过RS232端口和LAN(它是某种工业机器)发送一些数据。没有连接到PC的屏幕。 我使用" / dev / input / event1"一切正常,但启动后计算机显示系统登录/通过提示,键盘由我的应用程序捕获,但也通过系统登录。我的问题是如何通过系统禁用捕获键盘进行登录,但是使用我的应用程序继续运行?
答案 0 :(得分:3)
您面临的问题是,默认情况下,设备的所有输入事件处理程序都会收到所有事件。您的案例至少有两个处理程序:控制台的键盘驱动程序和应用程序的evdev
用户空间界面。
为了避免这种情况,您的应用程序应该指示evdev
模块抓取输入设备,以便EVIOCGRAB
ioctl
专用。这将阻止任何其他处理程序(包括其他用户空间应用程序)从该设备接收任何事件。
抓住设备:
int ret = ioctl(fd, EVIOCGRAB, (void *)1);
要发布抓取的设备:
int ret = ioctl(fd, EVIOCGRAB, (void *)0);