Como executar o programa C ++ sempre que uma unidade flash USB é inserida

9

Eu tenho um programa em C ++ que acessa pen drives / pen drives USB. Funciona para a unidade flash atualmente inserida. Um programa C ++ normal não é executado até que seja executado. Mas eu queria que o programa fosse executado automaticamente sempre que uma unidade flash fosse inserida. Como posso fazer isso?

    
por vinayawsm 18.05.2015 / 15:39

2 respostas

7

Para uso geral, se você gostaria de executar seu programa para qualquer armazenamento USB. Use o driver para a correspondência de regras.

  1. Adicione um arquivo de regras udev

    sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. 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}"
    
  3. Recarregue todas as regras

    sudo udevadm control --reload-rules
    
  4. 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:

por user.dz 19.05.2015 / 16:57
5

Você pode usar udev para executar um comando arbitrário. Para fazer isso funcionar, crie uma regra em /etc/udev/rules.d/ :

sudo nano /etc/udev/rules.d/my-usb-device.rules

E digite:

ACTION=="add", ATTRS{idProduct}=="XXXX", ATTRS{idVendor}=="YYYY", RUN+="/location/of/my/command"

OBSERVAÇÃO: Os valores de XXXX e YYYY serão obtidos de lsusb output.

    
por Frantique 18.05.2015 / 15:45