我写了一个程序,从usb第二个键盘(实际上是一个条码扫描器)获取输入.问题是,如果另一个窗口处于活动状态,则数据将输入到那里,而不是在我的程序中.有人可以给我建议我做错了什么吗?
#include <stdio.h> #include <string.h> int main(int argc,char * argv[]){ FILE * fp_in; char * data; fp_in = fopen("/dev/input/by-id/usb-04d9_1400-event-kbd","r"); if(fp_in == NULL){ fprintf(stderr,"Failed to open input by id\n"); } fp_in = fopen("/dev/input/by-path/pci-0000:00:1d.1-usb-0:2:1.0-event-kbd","Failed to open input by path\n"); return 1; } while(1){ fscanf(fp_in,data,"%s"); fprintf(stderr,"%s",data); } return 0; }
谢谢
如果我可以如此大胆地代表Confusedly的问题重新表述:
如何在Linux下编写一个程序,将其附加到输入设备(在这种情况下是条形码扫描器),以便输入不到具有键盘焦点的程序?
我试图做同样的事情,我做的是使用xinput“浮动”该设备.在我的情况下,xinput列表显示(除其他外)
HID键盘设备HID键盘设备id = 13 [从机键盘(3)]
这是对应于条码扫描器的设备.然后可以简单地输入
xinput float 13
进入终端来自扫描仪的按键将不再被输入到关注的窗口中,但仍可以从设备文件中读取.但是,您需要解码从文件中读取的事件,以获取所需的信息(条形码).有关如何执行此操作的信息,请参阅format of /dev/input/event*?.
最后,要读取没有root权限的设备文件,只需为扫描器添加一个udev规则.对我来说,这是这样的:
SUBSYSTEM ==“input”,ATTRS {idVendor} ==“1d57”,ATTRS {idProduct} ==“001c”MODE =“0644”
扫描仪的idVendor和idProduct可以在插入扫描仪后检查dmesg的输出.