python-evdev icon indicating copy to clipboard operation
python-evdev copied to clipboard

Mouse injection not working

Open TruthSeeker-3e8 opened this issue 1 year ago • 0 comments

I was working on program for controlling computer over LAN, but when I tried to add mouse control. Nothing seemed to happen. Keyboard works fine, but mouse seems to be completely ignored. Originally tested on Hyprland, but to be sure Hyprland is not to blame I tested it on GNOME as well., but no luck there either. I got no crash and no errors, even tried to use Try Except if it catches any exception, but nothing.

OS: ArcoLinux x86_64 Kernel: 6. 8. 7-arch1-1 Compositor: Wayland Gnome version: 46 Hyprland: hyprland-git 0.39.1.r4.82222342-1

I created simplified code example which contains the main problematic parts along with keyboard test to prove it works for keyboard.

Code:

#!venv/bin/python

import time
import os

class trigg_unix:
    global ui
    global e
    def move_cursor(sx,sy):
        print("Moving:[{x},{y}]".format(x=sx,y=sy))
        ui.write(e.EV_REL, e.REL_X,sx)
        ui.write(e.EV_REL, e.REL_Y,sy)
        ui.syn()
    def press_uparrow():
        print("Pressing arrow up")
        ui.write(e.EV_KEY,e.KEY_UP,1)
        ui.write(e.EV_KEY,e.KEY_UP,0)
        ui.syn()

def init_unix():
    global trigg
    global ui
    global e
    from evdev import UInput,AbsInfo, categorize, ecodes as e
    cap = {e.EV_REL: [e.REL_X, e.REL_Y],e.EV_KEY: [e.KEY_UP,e.KEY_DOWN,e.KEY_RIGHT,e.KEY_LEFT,e.KEY_ENTER,e.KEY_TAB, e.KEY_ESC,e.KEY_VOLUMEUP,e.KEY_VOLUMEDOWN],}
    ui = UInput(cap,"virtual-device")
    print("Unix loaded")
    trigg=trigg_unix
    return ui

def mouse_test():
    print("Testing mouse control move by [1000,1000]:")
    for t in range(1,5):
        time.sleep(1)
        print("Testing in {tl}".format(tl=5-t))
    trigg_unix.move_cursor(1000,1000)

def keyboard_test():
    print("Testing keyboard by pressing arrow up")
    for t in range(1,5):
        time.sleep(1)
        print("Testing in {tl}".format(tl=5-t))
    trigg_unix.press_uparrow()


def main():
    print("Creating device:")
    print(init_unix())
    for t in range(1,5):
        time.sleep(1)
        print("Clearing log in {tl}".format(tl=5-t))
    keyboard_test()
    time.sleep(3)
    os.system("clear")
    mouse_test()

if __name__ == "__main__":
    main()

TruthSeeker-3e8 avatar Apr 18 '24 18:04 TruthSeeker-3e8