我编写了一个从 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","r");
if(fp_in == NULL){
fprintf(stderr,"Failed to open input by path\n");
return 1;
}
while(1){
fscanf(fp_in,data,"%s");
fprintf(stderr,"%s",data);
}
return 0;
}
thanks
If I may be so bold as to rephrase the question on Confuzzled's behalf:
如何在 Linux 下编写一个将自身附加到输入设备(在本例中为条形码扫描仪)的程序,以便输入不会进入具有键盘焦点的程序?
我试图做同样的事情,我所做的是使用 xinput“浮动”该设备。就我而言,xinput list
展示(除其他外)
HID Keyboard Device HID Keyboard Device id=13 [slave keyboard (3)]
这是与条形码扫描仪相对应的设备。然后您只需输入
xinput float 13
进入终端。来自扫描仪的击键将不再输入到聚焦窗口中,但仍然可以从设备文件中读取它们。但是,您需要对从文件中读取的事件进行解码才能获取所需的信息(条形码)。看/dev/input/event* 的格式? https://stackoverflow.com/questions/5060710/format-of-dev-input-event有关如何执行此操作的一些信息。
最后,要在没有root权限的情况下读取设备文件,只需为扫描器添加udev规则即可。对我来说,是这样的:
SUBSYSTEM=="input", ATTRS{idVendor}=="1d57", ATTRS{idProduct}=="001c" MODE="0644"
可以通过检查输出来找到扫描仪的 idVendor 和 idProductdmesg
插入扫描仪后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)