无法使用python-uinput将触摸事件写入uinput

时间:2018-03-26 20:50:47

标签: python linux touch evdev uinput

我正在尝试编写触摸事件。我正在使用相机跟踪手,所以我需要两个指针,我需要显示它们。

这是我尝试过的,但它没有做任何事情:

import uinput
import time

device = uinput.Device([
        uinput.BTN_TOUCH,
        uinput.BTN_TOOL_PEN,
        # uinput.INPUT_PROP_POINTER,  # This property doesn't exist... what is the alternative?
        uinput.ABS_X,
        uinput.ABS_Y,
        ])
time.sleep(1)

device.emit(uinput.ABS_X, 5)
device.emit(uinput.ABS_Y, 5)

device.emit(uinput.BTN_TOUCH, 1)

for i in range(20):
    time.sleep(0.01)
    device.emit(uinput.ABS_Y, 5 * i)

device.emit(uinput.BTN_TOUCH, 0)

但是,使用鼠标有效:

import uinput
import time

device = uinput.Device([
        uinput.BTN_LEFT,
        uinput.BTN_RIGHT,
        uinput.REL_X,
        uinput.REL_Y,
        ])
time.sleep(1)

for i in range(20):
    time.sleep(0.01)
    device.emit(uinput.REL_Y, 5)

但我需要绝对而非相对定位。

我是否可以从终端查看事件进行调试?

我希望能够有2个指针,绝对定位,触摸/点击,悬停(BTN_TOOL_PEN),我的目的是允许拖动/滚动。 关于我应该使用什么事件以及一个简单的工作示例的任何指导都会很棒!

我无法让evdev工作,但也欢迎回答。

1 个答案:

答案 0 :(得分:0)

我假设你在某个地方的服务器上消费这些设备事件? X11? 删除uinput.BTN_TOOL_PEN并定义每个评估者的范围:

    uinput.BTN_TOUCH,
    uinput.ABS_X + (0, 2**24-1, 0, 0),
    uinput.ABS_Y + (0, 2**24-1, 0, 0),
    uinput.ABS_PRESSURE + (0, 255, 0, 0),

如果您仍有问题,请留意您的Xorg日志文件。