Para uso geral, se você gostaria de executar seu programa para qualquer armazenamento USB. Use o driver para a correspondência de regras.
-
Adicione um arquivo de regras
udev
sudo nano /etc/udev/rules.d/90-detect-storage.rules
-
Adicione esta regra
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
Se você quiser que seu programa diferencie os discos, para que ele execute operações diferentes, use (você pode passar seu número de série ou qualquer atributo que desejar):
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
-
Recarregue todas as regras
sudo udevadm control --reload-rules
-
Desconecte e conecte novamente a unidade flash
Notas:
-
Eu usei esta regra apenas para testar o que cria um log quando a regra é acionada:
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo $env{ID_VENDOR_ID} $env{ID_MODEL_ID} >> /home/username/Desktop/usb-storage.log'"
-
Você pode comentar as regras que não deseja adicionando
#
ao início da linha. O arquivo de regras pode conter várias regras. -
Para verificar todas as variáveis
env
disponíveis, use:ACTION=="add", DRIVERS=="usb-storage", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage-env.log; env >> /home/username/Desktop/usb-storage-env.log'"
-
Para verificar os parâmetros a serem usados na correspondência de regras, execute:
sudo udevadm info --name=/dev/sdb1 --attribute-walk
Referências: