利用python检测input设备的event事件
1.
查看linux下的input设备使用命令:
还可以使用cat /proc/bus/input/devices查看各个event对应的设备名字
我的机器上可以看到鼠标对应的值如下,使用的event4:
或者令cat /sys/class/input/event4/device/name 得到如下结果:
ImPS/2 Generic Wheel Mouse
上面是鼠标的名字
2.
知道eventX对应的具体设备,就可以通过读取设备文件/dev/eventX来获得设备额的输入信息。这里采用python来获取。其实python只是利用了一些C库的函数,基本过程与使用编程一样。其原理是嗲用C的系统函数evdev_read()读取/dev/eventX设备中的buffer数组,里面存有input_event类型数据,下面内核上报的事件都会存在这里。
首先需要evdev和select两个模块,前者需要下载。命令如下:
然后建立ev.py文件,输入如下内容
#!/usr/bin/python
from evdev import InputDevice
from select import select
dev = InputDevice('/dev/input/event4')
while True:
r,w,x = select([dev], [], [])
for event in dev.read():
print(event)
说明:
select([dev], [], []) : 超时时间设置为空(空不是0),会一直等待dev发生改变在继续执行后面的程序
ev.read():返回的是client—>buffer数组,是input_event类型的
执行该文件 ,用root权限:
当移动或者按下鼠标时,接收到input_event,下面是敲击鼠标左键所得结果:
各type值具体意义如下:
EV_SYN: 0x00用于事件间的分割标志
EV_KEY: 0x01用来描述键盘,按键或者类似键盘设备的状态变化
EV_REL: 0x02用来描述相对坐标轴上数值的变化,比如鼠标
EV_ABS: 0x03用来描述相对坐标轴上数值的变化,例如:描述触摸屏上坐标的值
后面还有很多,暂不表述。
第一行type 01表示按键(鼠标按键),键码272 值是01表示按下
第二行同步信号,表示本次event结束
第三行键值00表示松开
第四行也是同步信号
当鼠标移动时也有数据,具体自己动手可以查看。