我一直在尝试从键盘设备捕获输入:
/dev/input/by-path/platform-i8042-serio-0-event-kbd
对我来说,我想知道它返回的内容是否有任何规范,使用
od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd
听。我很好奇主要是因为某些按键的行为;元、箭头键、数字键盘正斜杠。
0520300 ac 9d 86 4c 6b 0f 04 00 04 00 04 00 (db) 00 00 00
0520320 ac 9d 86 4c 8c 0f 04 00 01 00 (7d) 00 00 00 00 00
0520340 ac 9d 86 4c 95 0f 04 00 00 00 00 00 00 00 00 00
到目前为止,我查看过的每个其他键都将括号中的两个字节作为匹配值,这些有什么特殊的原因吗?
最佳答案
/dev/input/by-path/platform-i8042-serio-0-event-kbd
只是 /dev/input/eventX
事件设备的符号链接(symbolic link)文件。可以从事件设备文件中读取数据:
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
在/usr/include/linux/input.h
中定义。
type
的可能值以 EV_
为前缀。
code
的可能值取决于type
。它们的前缀为 KEY_
或 BTN_
或 REL_
等。
value
的可能值取决于 type
和 code
。例如,对于按键事件 value
等于 1
,对于按键释放事件 0
。
您可以通过以下方式检查事件数据:
evtest /dev/input/eventX
其中 X
是键盘(或任何其他事件设备)的事件设备编号。按下或释放一个按键通常会发出三个事件(EV_MSC
、EV_KEY
和 EV_SYN
)。
关于keyboard -/dev/输入键盘格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662368/