import pyudev import signal import sys def on_usb_attached(device): print(f"USB device attached: {device.device_node or device.sys_name}") def on_usb_detached(device): print(f"USB device detached: {device.device_node or device.sys_name}") def list_current_usb_devices(): print("Currently attached USB devices:") context = pyudev.Context() for device in context.list_devices(subsystem='usb', DEVTYPE='usb_device'): print(f"- {device.device_node or device.sys_name} ({device.get('ID_MODEL', 'Unknown Device')})") print() def monitor_usb(): context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by(subsystem='usb') # Only USB devices for device in iter(monitor.poll, None): if device.action == 'add': on_usb_attached(device) elif device.action == 'remove': on_usb_detached(device) def signal_handler(sig, frame): print("\nStopping USB monitor...") sys.exit(0) if __name__ == "__main__": signal.signal(signal.SIGINT, signal_handler) list_current_usb_devices() print("Monitoring USB devices. Press Ctrl+C to exit.\n") monitor_usb()