我正在为 Debian Linux 编写一个 ANSI C 应用程序,它从 USB 键盘捕获数据并通过 RS232 端口和 LAN(它是某种工业机器)发送一些数据。没有屏幕连接到 PC。我正在使用从“/dev/input/event1”捕获并且一切正常,但是在启动计算机后显示系统登录/通过提示并且键盘被我的应用程序以及系统登录捕获。我的问题是如何禁用系统捕获键盘以进行登录,但让它与我的应用程序一起运行?
问问题
1676 次
1 回答
4
您面临的问题是,默认情况下,设备的所有输入事件处理程序都会接收所有事件。您的情况至少有两个处理程序:控制台的键盘驱动程序和evdev
应用程序的用户空间界面。
为避免这种情况,您的应用程序应指示evdev
模块获取输入设备,以供其与EVIOCGRAB
ioctl
. 这将阻止任何其他处理程序,包括其他用户空间应用程序,从该设备接收任何事件。
要抓取设备:
int ret = ioctl(fd, EVIOCGRAB, (void *)1);
要释放抓取的设备:
int ret = ioctl(fd, EVIOCGRAB, (void *)0);
于 2013-01-19T16:17:16.863 回答