Eu não acredito que você possa fazer isso com dispositivos burros, como mencionado em @meuh comment aqui. . Com dispositivos que realmente se comunicam, udevadm monitor
funciona bem. Aqui está um exemplo de conectar e desconectar um telefone Android (ligado):
$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[115749.498687] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
KERNEL[115749.499591] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
UDEV [115749.511659] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
UDEV [115749.516846] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
KERNEL[115767.515839] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
KERNEL[115767.516143] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
UDEV [115767.517088] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
UDEV [115767.522116] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
Uma unidade flash produz resultados semelhantes, mas muito mais detalhados. Se você quisesse usar essas informações para acionar alguma ação, poderia redirecionar a saída para um arquivo e usar tail
para monitorar o arquivo em busca de nova atividade.
Os testes com um telefone Android (desligado, mas carregando) não indicaram nenhuma alteração na lsusb -v |grep Power
de saída, que a IMHO confirma que dispositivos burros que apenas consomem ou fornecem energia não podem ser detectados.
Outra forma simples de detectar dispositivos que não são burros é armazenar informações de linha de base e comparar as informações atuais com isso. Existem várias maneiras de fazer isso. Uma alternativa simples ao udevadm
mencionado acima é simplesmente coletar dados de linha de base para o sistema sem que o dispositivo seja detectado conectado. Por exemplo:
Coletar dados de linha de base: lsusb > baseline.txt
Verifique os dados atuais e compare:
while true; do lsusb > compare.txt ; diff compare.txt baseline.txt; sleep 1; done
Isto irá comparar as conexões USB atuais com a linha de base uma vez a cada segundo.
Se o seu script atualizar os dados da linha de base após a detecção, você também poderá detectar a remoção do dispositivo por esse método.