如何从/ dev/input/mice中读出滚轮信息?

kra*_*r65 5 python linux mouse input mousewheel

对于家庭机器人项目,我需要读出原始鼠标移动信息.通过使用此SO-answer中的python脚本,我部分成功了.它基本上读出/ dev/input/mice并将hex-input转换为整数:

import struct
file = open( "/dev/input/mice", "rb" )

def getMouseEvent():
  buf = file.read(3)
  button = ord( buf[0] )
  bLeft = button & 0x1
  bMiddle = ( button & 0x4 ) > 0
  bRight = ( button & 0x2 ) > 0
  x,y = struct.unpack( "bb", buf[1:] )
  print ("L:%d, M: %d, R: %d, x: %d, y: %d\n" % (bLeft,bMiddle,bRight, x, y) )

while True:
  getMouseEvent()
file.close()
Run Code Online (Sandbox Code Playgroud)

这种方法很好,除了滚轮信息丢失的事实.有谁知道我怎么能得到(最好用python)来自/ dev/input/mice的滚轮信息?

[编辑]好的,虽然我没有设法读出/ dev/input/mice,但我认为我找到了解决方案.我刚刚找到了evdev模块(sudo pip install evdev),您可以使用它读出输入事件.我现在有以下代码:

from evdev import InputDevice
from select import select
dev = InputDevice('/dev/input/event3') # This can be any other event number. On my Raspi it turned out to be event0
while True:
    r,w,x = select([dev], [], [])
    for event in dev.read():
        # The event.code for a scroll wheel event is 8, so I do the following
        if event.code == 8:
            print(event.value)
Run Code Online (Sandbox Code Playgroud)

我现在要在我的raspi上测试它,看看它是如何工作的.感谢所有的灵感男人和女孩!

zak*_*ter 2

如果 /dev/input/mice 中每个事件只有 3 个字节,则意味着您的鼠标被配置为无轮 PS/2 鼠标。如果将鼠标配置为 IMPS/2 鼠标,则 /dev/input/mice 中应该有每个事件的第四个字节。最后一个字节将包含车轮信息。