【问题标题】:How to read out scroll wheel info from /dev/input/mice?如何从 /dev/input/mice 读取滚轮信息?
【发布时间】:2023-03-20 13:55:02
【问题描述】:

对于家用机器人项目,我需要读出原始鼠标移动信息。我通过使用来自this SO-answer 的python 脚本部分地成功了。它基本上读出 /dev/input/mice 并将十六进制输入转换为整数:

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()

这很好用,只是缺少滚轮信息。有人知道我如何从 /dev/input/mice 获取(最好是使用 python)滚轮信息吗?

[编辑] 好的,虽然我没能读出 /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)

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

【问题讨论】:

  • 感谢您的解决方案!要找出您需要哪个 /dev/input/eventX,您可以运行 'cat /proc/bus/input/devices'

标签: python linux input mouse mousewheel


【解决方案1】:

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

【讨论】:

  • 嗯好的,不知道。您建议我如何将鼠标配置为 IMPS/2 鼠标?
  • 嗯,这更像是硬件问题而不是软件问题,我认为您必须向鼠标发送一些魔术序列才能使其从 PS/2 协议切换到 IMPS/2 协议。
  • 您可以在此处找到有关 PS/2 协议的更多信息:win.tue.nl/~aeb/linux/kbd/scancodes-13.html
  • 好吧,我正在阅读有关更改 /etc/X11/ 中的文件的内容,但我有点迷路了……
  • 如果你有 X11 服务器,为什么不直接使用 XLib 呢?我认为有一个python XLib接口。
猜你喜欢
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2015-03-05
  • 2023-03-22
相关资源
最近更新 更多