Python-uinput无法移动鼠标光标

标签 python uinput

当我将Python-uinput作为脚本运行时,它无法移动光标

python main.py

但是当我使用 Python 交互式逐步运行时它工作正常

import uinput
import Tkinter as tk

root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.destroy()

device = uinput.Device([
         uinput.BTN_LEFT,
         uinput.BTN_RIGHT,
         uinput.REL_X,
         uinput.REL_Y,
         ])
def main():
    device.emit(uinput.REL_X, -1 * screen_width)
    device.emit(uinput.REL_Y, -1 * screen_height)
if __name__ == '__main__':
    main()

这是一个不移动光标的命令。

spksoft@spksoft ~/code/python/Sample HI $ python main.py
Traceback (most recent call last):
  File "main.py", line 13, in <module>
    uinput.REL_Y,
  File "/usr/local/lib/python2.7/dist-packages/uinput/__init__.py", line 161, in __init__
    self.__uinput_fd = _libsuinput.suinput_open()
  File "/usr/local/lib/python2.7/dist-packages/uinput/__init__.py", line 64, in _error_handler
    raise OSError(code, os.strerror(code))
OSError: [Errno 13] Permission denied
spksoft@spksoft ~/code/python/Sample HI $ sudo python main.py
spksoft@spksoft ~/code/python/Sample HI $

这是一个与python交互的命令,它可以正确地移动光标。

spksoft@spksoft ~/code/python/Sample HI $ sudo python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import uinput
>>> import Tkinter as tk
>>> root = tk.Tk()
>>> screen_width = root.winfo_screenwidth()
>>> screen_height = root.winfo_screenheight()
>>> root.destroy()
>>> device = uinput.Device([
...         uinput.BTN_LEFT,
...         uinput.BTN_RIGHT,
...         uinput.REL_X,
...         uinput.REL_Y,
...         ])
>>> device.emit(uinput.REL_X, -1 * screen_width)
>>> device.emit(uinput.REL_Y, -1 * screen_height)
>>> 

测试视频:Python-uinput cursor does move test

最佳答案

至少在 X11 下,因为您的测试代码完成得如此突然,所以在代码退出之前没有时间创 build 备的处理程序。
对于代码退出时的这些测试用例,解决方案是添加一个 time.sleep() 命令。
在实时运行条件下,不需要这样做。

import uinput
import Tkinter as tk
import time
root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.destroy()

device = uinput.Device([
         uinput.BTN_LEFT,
         uinput.BTN_RIGHT,
         uinput.REL_X,
         uinput.REL_Y,
         ])
def main():
    time.sleep(1)
    device.emit(uinput.REL_X, -1 * screen_width)
    device.emit(uinput.REL_Y, -1 * screen_height)
if __name__ == '__main__':
    main()

关于Python-uinput无法移动鼠标光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33368531/

相关文章:

python - 如何不爬取如果和之前在scrapy框架中爬取数据一样

c - 鼠标指针在输入子系统中移动后无法模拟 Click 事件

c - 用于 Ubuntu 14.04 的 C 中的 UINPUT 设备程序不起作用。为什么?

c - 在 Raspberry Pi 2 B 上构建使用 libusb 的程序时出错

将 Char 转换为内核 Keycode(供 uinput 使用)

linux - Uinput 和树莓派

python - 如何在 python 中平滑具有不同高斯函数的二维数组的元素?

python - 激活virtualenv时如何不显示路径

python - 顶部(bash): show the name of the python script instead of "python"

Python 脚本未创建足够的输出行