Search code examples
pythonlinuxbackgroundmouseeventkeyevent

How can I capture mouseevents and keyevents using python in background on linux


I'd like to make a python script that can run in the background but print text when a mouseevent or keyevent happens. Are there any libraries/builtin functionality to achieve this? Or any system commands I can call to get this info? Being root is no issue.


Solution

  • I guess, you might use python bindings for evdev: http://packages.python.org/evdev/index.html. In tutorial they give an example for keyboard, but it should be similar for mouse events:

    >>> from evdev import InputDevice, categorize, ecodes
    >>> from select import select
    >>> dev = InputDevice('/dev/input/event1')
    
    >>> print(dev)
    device /dev/input/event1, name "Dell Dell USB Keyboard", phys "usb-0000:00:12.1-2/input0"
    
    >>> while True:
    ...    r,w,x = select([dev], [], [])
    ...    for event in dev.read():
    ...        if event.type == ecodes.EV_KEY:
    ...            print(categorize(event))
    ... # hitting a and holding space
    key event at 1337016188.396030, 30 (KEY_A), down
    key event at 1337016188.492033, 30 (KEY_A), up
    key event at 1337016189.772129, 57 (KEY_SPACE), down
    key event at 1337016190.275396, 57 (KEY_SPACE), hold
    key event at 1337016190.284160, 57 (KEY_SPACE), up