Detecting USB Events In Ubuntu With Python
udev is responsible for managing devices on Linux. It provides udevadm, a CLI utility to monitor and control devices.
If we run udevadm monitor on terminal and connect a USB drive or hard disk or a mobile via USB to your computer, it will show that kernel has detected the device and it will send a signal to udev about it.
→ udevadm monitor monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[4336.899091] add /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb) KERNEL[4336.899774] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb) KERNEL[4336.902553] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1 (usb) UDEV [4336.911201] add /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb) UDEV [4336.936453] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1 (usb) UDEV [4337.947174] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
Pyudev, a third party package provides python bindings for udev. It can be installed with pip install pyudev.
With this we can create a simple monitor to detect USB events.
import pyudev context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by(subsystem='usb') for device in iter(monitor.poll, None): if device.action == 'add': print('{} connected'.format(device)) # do something
Save this to a file say monitor.py and run it with python monitor.py and connect a mobile or pendrive and it will show something like this.
Device('/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0') connected Device('/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0') connected
Here we are just detecting add event. Similary we can detect other events like delete.
This is useful for automatically running shell scripts once the device gets plugged or unplugged.
Need further help with this? Feel free to send a message.
