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

时间:2011-01-31 20:38:25

标签: python linux mouse hid

我知道Linux从/ dev / input / mice中发出了9位2的赞美数据。我也知道你可以通过/ dev / hidraw0获取数据,其中hidraw是你的USB设备,从HID中提供原始数据。我知道发送的数据是移动的增量(位移)而不是位置。通过我也可以通过“cat / dev / input / mice”查看乱码数据。我的问题是:

请告诉我使用Python语言如何读取这些数据?我真的很喜欢用简单的整数来获取数据。但事实证明这很难。真正的问题是阅读该死的数据。有没有办法读取位并进行位运算? (目前我并不担心root用户相关的问题。请假设脚本在root中运行。)

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

4 个答案:

答案 0 :(得分:14)

我在基本设备上,无法访问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();

答案 1 :(得分:5)

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

答案 2 :(得分:2)

是的,Python可以以二进制形式读取文件。只需在打开文件时使用'b'标记,例如open('dev/input/mice', 'rb')

Python还支持所有典型的按位算术运算:移位,反转,按位和/或xor,而不是等等。

使用库处理这些数据可能会更好,而不是自己动手。

答案 3 :(得分:0)

您需要以根用户身份打开编辑器,以绕过在尝试运行此脚本时可能遇到的与权限相关的错误消息。 /dev/input/mice 设备仅对根用户可用。