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.
Asked
Active
Viewed 1.8k times
10
-
You have to read input events from the devices in `/dev/input`. – Some programmer dude Sep 12 '12 at 09:33
-
`cat /dev/input/mice mouse0` `mouse1` `event0-9` are just giving me blank, if I redirect output to another file it remains blank? It there something fundamentally different to it than reading from `/dev/urandom` ? – jett Sep 12 '12 at 09:58
2 Answers
14
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

Boris Burkov
- 13,420
- 17
- 74
- 109
4
Take a look at pynput, for example:
from pynput.keyboard import Key, Listener
#defining function to print when key is pressed
def on_press(key):
print('{0} pressed'.format(
key))
#defining function to print when key is released
def on_release(key):
print('{0} release'.format(
key))
if key == Key.esc:
# Stop listener
return False
# Collect events until released
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()

Community
- 1
- 1

Hristo Vrigazov
- 1,357
- 2
- 12
- 20