使用 Python 获取鼠标增量! (在 Linux 中)

问题描述 投票:0回答:5

我知道Linux从/dev/input/mice中给出了一个9位的补码数据。我还知道您可以通过 /dev/hidraw0 获取该数据,其中 hidraw 是您的 USB 设备,从 HID 发出原始数据。

我知道发送的数据是运动的增量(位移)而不是位置。顺便说一句,我还可以通过“cat /dev/input/mice”查看乱码数据。

使用Python语言,如何读取这些数据?我真的更愿意以简单整数的形式获取这些数据。但事实证明这很难。真正的问题是读取该死的数据。有没有办法读取位并进行位算术? (目前我不担心与 root 用户相关的问题。请假设脚本以 root 身份运行。)

(我的主要参考是http://www.computer-engineering.org/ps2mouse/

python linux mouse hid
5个回答
20
投票

我使用的是基本设备,无法访问 X 或...,因此 event.py 不起作用。

所以这是我更简单的解码代码部分,用于解释“已弃用的”'/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) );
  # return stuffs

while( 1 ):
  getMouseEvent();
file.close();

6
投票

来自输入系统的数据以结构形式出现,而不是简单的整数。我相信鼠标设备已被弃用。首选方法是事件设备接口,其中也可以获得鼠标(和其他)输入事件。我编写了一些执行此操作的代码,即 Event.py 模块 您可以使用它,或者从那里开始。


3
投票

是的,Python 可以读取二进制形式的文件。打开文件时只需使用

'b'
标志,例如
open('dev/input/mice', 'rb')

Python 还支持所有典型的按位算术运算:移位、反转、按位与、或、异或、非等。

不过,使用库来处理这些数据可能会比你自己处理更好。


0
投票

您需要以 root 身份打开编辑器,以绕过尝试运行此脚本时可能遇到的 与权限相关的错误消息

/dev/input/mice
设备仅适用于root


0
投票

您可以使用

evdev
包。根据文档,该包使用
/dev/input/
进行操作,并具有许多功能,例如永久读取输入、读取一个输入、写入一个事件等。 用法

© www.soinside.com 2019 - 2024. All rights reserved.