首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >原始键盘输入

原始键盘输入
EN

Stack Overflow用户
提问于 2022-08-24 14:20:06
回答 1查看 24关注 0票数 0

我想要做的是有一个备用的覆盆子皮与四个USB键盘连接(或四个鼠标)。

我想知道的是,不仅仅是按了一个键,而是按下了哪个键盘,这样不同的键盘按钮就能做不同的事情。(想想宏按钮。)同样地,如果我有四只老鼠插上电源,我想要接收原始数据,并且能够分辨哪只老鼠被移动了。

理想情况下,我想知道如何用C语言来完成这个任务。

插入设备的设备将由SSH控制,因此不需要按键来做他们通常做的事情。

EN

回答 1

Stack Overflow用户

发布于 2022-08-25 16:37:57

我已经开始了。对于Linux,现在这就足够了,在/dev/input中有一些设备名为/dev/input/event0 0,您可以从中读取。其中一些将对应于实际的输入设备,有些将是虚拟的。

信息可以在/sys/class/input中找到。例如,对于我的USB键盘:

代码语言:javascript
代码运行次数:0
运行
复制
$ cat /sys/class/input/input24/name
Logitech K360

此外,/sys/class/input/input 24/uevent还有很多有用的信息。现在,要从键盘读取原始输入,您可以从/dev/ raw /event0 0之类的地方读取。为了找出这些事件是什么,例如,对于/dev/input/event0,那么/sys/class/input/event0/device指向上面相应的input24。

现在用C来读,

代码语言:javascript
代码运行次数:0
运行
复制
#include <unistd.h>
#include <stdio.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <linux/input.h>

/*
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
*/

int main() {
  int fd = open("/dev/input/event0", O_RDONLY);
  struct input_event evt;
  while(1) {
    read(fd,&evt,sizeof(evt));
    printf("Event: type=%hd code=%hd value=%08x=%d\n",evt.type,evt.code,evt.value,evt.value);
  }
}

我剩下的唯一问题是如何“断开”键盘,使其事件被忽略(除了读取原始输入的进程)。我知道如何使xinput float 34浮动,例如设备34。那就是Xorg,而不是没有X的设备上的文本控制台,也不是f。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73474808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档