我试图找到一种方法来模拟/自动化鼠标运动使用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)
这最后一个脚本有什么遗漏吗?我正试图以超级用户权限在韦兰上执行它。
1条答案
按热度按时间ccrfmcuu1#
在发出任何事件之前,您应该稍等片刻。
在uinput example code中,它表示:
我们在这里插入了一个暂停,以便用户空间有时间检测、初始化新设备,并可以开始侦听事件,否则它将不会注意到我们将要发送的事件。
在设备初始化之后放置一个
time.sleep(1)
可以解决这个问题。Ydotool为您要实现的目标提供了一个用户空间应用程序和守护进程,它也会等待一秒钟。