⬢ DragonFlyBSD Kernel Audit
DF-3590 / inject_mouse.py
← back to finding ↓ download raw
#!/usr/bin/env python3
"""Inject PS/2 mouse events into the guest via the QEMU HMP monitor socket."""
import socket, sys, time

SOCK = "dfbsd-qemu/boot-mon.sock"

def main():
    dur = float(sys.argv[1]) if len(sys.argv) > 1 else 30.0
    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    s.connect(SOCK)
    s.settimeout(2.0)
    try:
        s.recv(4096)  # banner
    except Exception:
        pass
    def cmd(c):
        try:
            s.sendall((c + "\n").encode())
            time.sleep(0.02)
            try:
                s.settimeout(0.3)
                return s.recv(65536).decode(errors="replace")
            except socket.timeout:
                return ""
        except Exception as e:
            return "ERR %s" % e
    print(cmd("info mice"))
    t0 = time.time()
    i = 0
    while time.time() - t0 < dur:
        dx = (i % 7) - 3
        dy = ((i * 3) % 11) - 5
        cmd("mouse_move %d %d" % (dx, dy))
        if i % 500 == 0:
            cmd("mouse_button 1"); cmd("mouse_button 0")
        i += 1
        time.sleep(0.002)
    print("sent %d moves" % i)

main()