【问题标题】:Setting absolute cursor position using python uvdev使用 python uvdev 设置绝对光标位置
【发布时间】:2020-04-15 12:32:16
【问题描述】:

我正在尝试在 python 中模拟图形输入板,因此,我需要能够设置光标的绝对位置。我试过python-evdevpython-libevdev,但我无法设置绝对位置。将值写入 EV_ABS ABS_X 和 ABS_Y 根本不会对光标位置产生任何影响。值得一提的是,模拟按钮和相对定位效果很好。

我在 x11 上使用 Manjaro 4.19 和 Gnome。

我将不胜感激,并提前感谢您。

这里有一个简单的代码,它必须能够设置绝对光标位置,但事实并非如此。

from evdev import UInput, AbsInfo, ecodes as e
import pyautogui
import subprocess
import time

cap = {
    e.EV_KEY : [e.BTN_TOUCH],
    e.EV_ABS : [
        (e.ABS_X, AbsInfo(0, 0, 4080, 0, 0, 5080)),         
        (e.ABS_Y, AbsInfo(0, 0, 4080, 0, 0, 5080)),
        (e.ABS_PRESSURE, AbsInfo(0, 0, 2040, 0, 0, 0))
    ]
}

ui = UInput(cap, name='example-device', version=0x3)

for i in range(0,10):
    # assign driver to the default display
    time.sleep(0.5)
    process = subprocess.Popen(["xinput", "list"], shell=True, stdout=subprocess.PIPE)
    output = process.stdout.read().decode("utf-8")
    print(output)
    if "example-device" in output:
        print(output)
        subprocess.Popen([
            "xinput",
            "map-to-output",
            f"pointer:example-device",
            "eDP1"
        ])
        break
else:
    raise Exception("Can't map device to display.")

# print cursor position befor cahnge
print(pyautogui.position())

# move mouse cursor
ui.write(e.EV_ABS, e.ABS_X, 20)
ui.write(e.EV_ABS, e.ABS_Y, 20)
ui.syn()
# print cursor position after cahnge
print(pyautogui.position())

【问题讨论】:

    标签: python linux evdev


    【解决方案1】:

    好的。我认为要解决此问题,您需要将 BTN_TOOL_PEN 添加到 EV_KEY。至少这对我有用。如果您有兴趣,可以在my github 上查看整个项目。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多