Не могу записать сенсорные события в uinput, используя python-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 ответ

Я предполагаю, что вы используете эти события устройства на сервере где-нибудь? 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.

Другие вопросы по тегам