在 python 中初始化 libevdev 以便设备可以有多个工具工作

cam*_*ccc 6 python driver evdev

我一直在研究基于 python 的驱动程序,以在一些旧平板电脑中恢复一些功能。

我初始化如下

dev.enable(libevdev.EV_REL.REL_X )
dev.enable(libevdev.EV_REL.REL_Y )
dev.enable(libevdev.INPUT_PROP_DIRECT)
dev.enable(libevdev.EV_KEY.BTN_TOOL_PEN)
dev.enable(libevdev.EV_KEY.BTN_TOOL_RUBBER)
dev.enable(libevdev.EV_KEY.BTN_TOOL_MOUSE)
dev.enable(libevdev.EV_KEY.BTN_STYLUS)
dev.enable(libevdev.EV_KEY.BTN_STYLUS2)
dev.enable(libevdev.EV_ABS.ABS_X,libevdev.InputAbsInfo(minimum=0, maximum=Xmax*10,resolution=1270))
dev.enable(libevdev.EV_ABS.ABS_Y,libevdev.InputAbsInfo(minimum=0, maximum=Ymax*10,resolution=1270))
dev.enable(libevdev.EV_ABS.ABS_PRESSURE,libevdev.InputAbsInfo(0,254))
dev.enable(libevdev.EV_ABS.ABS_TILT_X,libevdev.InputAbsInfo(minimum=-64, maximum=64))
dev.enable(libevdev.EV_ABS.ABS_TILT_Y,libevdev.InputAbsInfo(minimum=-64, maximum=64))
dev.enable(libevdev.EV_KEY.BTN_LEFT)
dev.enable(libevdev.EV_KEY.BTN_RIGHT)


uinput = dev.create_uinput_device()
Run Code Online (Sandbox Code Playgroud)

然而当

[InputEvent(EV_KEY, BTN_TOOL_MOUSE, 1), InputEvent(EV_SYN, SYN_REPORT, 0)]
Run Code Online (Sandbox Code Playgroud)

发送后,此后在 xinput 中列出了笔而不是鼠标,尽管随后

[InputEvent(EV_KEY, BTN_TOOL_PEN, 1), InputEvent(EV_SYN, SYN_REPORT, 0)]
Run Code Online (Sandbox Code Playgroud)

工作,再次将输入工具设置为鼠标后,发送的位置数据将被忽略。

只有钢笔和橡皮擦工作。我以某种方式初始化这个错误吗?在 Ubuntu 20 和 FreeBSD 12 上测试