python 在Debian(非X11/X Window系统)上的Wayland中自动移动鼠标指针

x759pob2  于 2023-02-18  发布在  Python
关注(0)|答案(1)|浏览(131)

我试图找到一种方法来模拟/自动化鼠标运动使用Wayland协议在基于debian的操作系统,因为没有使用Xlib在X11/X窗口系统给出x和y坐标:

from Xlib.display import Display
from Xlib.ext.xtest import fake_input
from Xlib import X
import os

#Go to x and y coordinates and click with left button (1):
x = 26
y = 665
button = 1

myDisplay = Display(os.environ['DISPLAY'])

fake_input(myDisplay, X.MotionNotify, x=x, y=y)
myDisplay.sync()
fake_input(myDisplay, X.ButtonPress, button)
myDisplay.sync()
fake_input(myDisplay, X.ButtonRelease, button)
myDisplay.sync()

和派普特:

from pynput.mouse import Button, Controller

mouse = Controller()

mouse.position = (26,665)

mouse.click(Button.left)

我已经尝试用uinput从上面的脚本中重现同样的想法,代码没有给予错误,但是当脚本执行时什么也没有发生:
sudo modprobe uinput && sudo python3 uinputtest.py

import uinput

# Create new mouse device
device = uinput.Device([
    uinput.BTN_LEFT,
    uinput.BTN_RIGHT,
    uinput.REL_X,
    uinput.REL_Y,
])

# Move the pointer to x = 26 and y = 665
device.emit(uinput.REL_X, 26)
device.emit(uinput.REL_Y, 665)

# Click and release the left mouse button 
device.emit(uinput.BTN_LEFT, 1)
device.emit(uinput.BTN_LEFT, 0)

这最后一个脚本有什么遗漏吗?我正试图以超级用户权限在韦兰上执行它。

ccrfmcuu

ccrfmcuu1#

在发出任何事件之前,您应该稍等片刻。
在uinput example code中,它表示:
我们在这里插入了一个暂停,以便用户空间有时间检测、初始化新设备,并可以开始侦听事件,否则它将不会注意到我们将要发送的事件。
在设备初始化之后放置一个time.sleep(1)可以解决这个问题。Ydotool为您要实现的目标提供了一个用户空间应用程序和守护进程,它也会等待一秒钟。

相关问题