作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为 Debian Linux 编写一个 ANSI C 应用程序,它从 USB 键盘捕获数据并通过 RS232 端口和 LAN(它是某种工业机器)发送一些数据。没有屏幕连接到 PC。我正在使用从“/dev/input/event1”捕获并且一切正常,但在启动计算机后显示系统登录/通过提示并且键盘被我的应用程序和系统登录捕获。我的问题是如何禁用系统捕获键盘以进行登录,但保持它与我的应用程序一起运行?
最佳答案
您面临的问题是默认情况下设备的所有输入事件处理程序都会接收所有事件。您的情况至少有两个处理程序:控制台的键盘驱动程序和您的应用程序的 evdev
用户空间接口(interface)。
为避免这种情况,您的应用程序应指示 evdev
模块抓取输入设备以供其独占使用 EVIOCGRAB
ioctl
。这将阻止任何其他处理程序(包括其他用户空间应用程序)从该设备接收任何事件。
获取设备:
int ret = ioctl(fd, EVIOCGRAB, (void *)1);
释放被抓取的设备:
int ret = ioctl(fd, EVIOCGRAB, (void *)0);
关于linux - 如何在不在屏幕上书写的情况下捕获键盘输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415306/
我是一名优秀的程序员,十分优秀!