Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unix上重复的设备输入事件(/dev/input/event)_Python_Linux_Events_Driver_Device - Fatal编程技术网

Python unix上重复的设备输入事件(/dev/input/event)

Python unix上重复的设备输入事件(/dev/input/event),python,linux,events,driver,device,Python,Linux,Events,Driver,Device,我正在使用linux/ubuntu,我想用我的触摸板玩一下。我尝试使用python evdev从/dev/input/events读取事件,现在只打印它们: import evdev dev = evdev.InputDevice('/dev/input/event6') import time while True: try: for event in dev.read(): print event except: print " ~ " time

我正在使用linux/ubuntu,我想用我的触摸板玩一下。我尝试使用python evdev从/dev/input/events读取事件,现在只打印它们:

import evdev
dev = evdev.InputDevice('/dev/input/event6')

import time
while True:
  try:
    for event in dev.read():
      print event
  except:
    print " ~ "
    time.sleep(.5)

如果我在虚拟控制台中以root权限运行该脚本(在X之外,按ctrl+alt+F1),则当我触摸触摸板时,该脚本会打印事件。然而,若X在屏幕上,并且我在gnome终端控制台中运行它,则不会打印任何内容;我想这是正常的,输入被X截获。但我还是想得到它们。有没有办法复制来自/dev/input/event6的任何内容,以便thqt和我的脚本都可以读取所有事件

那么,您的想法是,X从您的触摸板获取数据,这样您的python代码就无法接收触摸板信号,对吗?或者,我可以重复您的话:至少对于某些特定类型的设备,当另一个应用程序正在从该设备读取数据时,该应用程序无法获取/dev/input/event*

从理论上讲,由于linux将所有设备都作为一个文件,因此您以只读方式访问文件,而X也以只读方式访问文件

我只是做了另一个实验:我在我的archlinux上有一个红外接收器,我用两个ssh控制台连接到系统。我使用两种方式访问IR,即两个应用程序读取/dev/input/event0文件(event0是我的arch上的SF):

1、一段python代码,带evdev

2,shell命令为:sudocat/dev/input/event0 | hextump

你可以把2号看成你的X号。如果你推理正确,当我从红外遥控器发送信号时,他们不应该同时从红外(event0)接收数据,对吗?但是,我在这两个ssh控制台上确实有了约会(我希望我能发布图片,但我是一个名声太低的新手,不能这么做)

所以,我认为这不应该是原因。我想这可能是因为你的触摸板本身。你知道,有些设备只能在单个应用程序上工作。e、 例如,键盘只能在激活的应用程序上输入字符,而某些输入方法只是使自己在其他应用程序上处于激活状态,并在处理后重定向。另外,比如说,如果您的系统上运行一个VM,并且您只使用一个鼠标,那么如果您在主机桌面上移动指针,会发生什么情况?VM中的指针会移动吗?反之亦然


所以我需要更多关于触摸板的信息。如果您的TP仅适用于单个活动应用程序,恐怕您需要一些类似于钩子的想法,以便在X之前获取触摸板信号,并将其重新记录到X和python代码中,这可能超出了evdev。

您可以基于evdev创建一个内核输入处理程序,以便将设备输入分发到普通的/dev/input/eventN和,比如说,/dev/input/copied\u event

X将从/dev/input/eventN读取,但您仍然可以从/dev/input/copied\u eventN读取


实际上,您可以通过在drivers/input/evdev.c中复制粘贴代码来轻松创建内核模块

在版本1.8之前,xorg synaptics驱动程序使用EVIOCGRAB ioctl来防止事件传递到其他客户端。默认情况下,现在已禁用该选项,您仍然可以在旧版本的计算机上使用GrabEventDevice选项禁用它(请参阅man synaptics)

简而言之,您的脚本没有问题,这里的问题是synaptics驱动程序。您会发现您的脚本在其他设备上也可以正常工作(尽管xorg wacom驱动程序直到最近才抓取该设备)

synaptics中的上游提交: