我想要做的是有一个备用的覆盆子皮与四个USB键盘连接(或四个鼠标)。
我想知道的是,不仅仅是按了一个键,而是按下了哪个键盘,这样不同的键盘按钮就能做不同的事情。(想想宏按钮。)同样地,如果我有四只老鼠插上电源,我想要接收原始数据,并且能够分辨哪只老鼠被移动了。
理想情况下,我想知道如何用C语言来完成这个任务。
插入设备的设备将由SSH控制,因此不需要按键来做他们通常做的事情。
发布于 2022-08-25 08:37:57
我已经开始了。对于Linux,现在这就足够了,在/dev/input中有一些设备名为/dev/input/event0 0,您可以从中读取。其中一些将对应于实际的输入设备,有些将是虚拟的。
信息可以在/sys/class/input中找到。例如,对于我的USB键盘:
$ 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来读,
#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。
https://stackoverflow.com/questions/73474808
复制