在(ubuntu)linux中捕获第二个键盘输入

我写了一个程序,从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的输出.

相关文章

文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预...
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载U...
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装...
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standa...
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主...