GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment exécuter un programme C++ à chaque fois qu'une clé USB est insérée ?

J'ai un programme C++ qui accède aux clés USB/lecteurs flash. Cela fonctionne pour le lecteur flash actuellement inséré. Un programme C++ normal ne s'exécute pas tant que nous ne l'avons pas exécuté. Mais je voulais que le programme s'exécute automatiquement chaque fois qu'un lecteur flash est inséré. Comment puis-je faire cela ?

Réponse acceptée :

Pour une utilisation générale, si vous souhaitez exécuter votre programme pour n'importe quel stockage USB. Utilisez le pilote pour la correspondance de règle.

  1. Ajouter un udev fichier de règles

    sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. Ajouter cette règle

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
    

    Si vous voulez que votre programme distingue les disques, afin qu'il exécute différentes opérations, utilisez (vous pouvez passer son numéro de série ou tout attribut que vous aimez) :

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
    
  3. Recharger toutes les règles

    sudo udevadm control --reload-rules
    
  4. Débranchez et rebranchez le lecteur flash

Remarques :

  • J'ai utilisé cette règle juste pour tester qui crée un journal lorsque la règle est déclenchée :

    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'"
    
  • Vous pouvez commenter les règles que vous ne voulez pas en ajoutant # au début de la ligne. Le fichier de règles peut contenir plusieurs règles.

  • Pour vérifier tous les env disponibles variables, utilisez :

    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'"
    
  • Pour vérifier les paramètres à utiliser pour la correspondance de règle, exécutez :

    sudo udevadm info --name=/dev/sdb1 --attribute-walk
    

Références :

  • Passez ATTR{idVendor} comme argument dans le script udev
  • Rédaction des règles udev par Daniel Drake

Ubuntu
  1. Comment chiffrer une clé USB sur Ubuntu 18.04 LTS

  2. Comment copier automatiquement le contenu d'un lecteur USB (flash) vers un autre répertoire ?

  3. Impossible de créer une clé USB amorçable sur Mac ?

  4. Comment monter une clé USB sous Linux

  5. Comment créer un Memtest86+ bootable sur clé USB ?

Comment créer une clé USB amorçable Ubuntu 22.04 sous Windows

Comment afficher une notification lorsqu'un périphérique USB est inséré ?

Comment Cd facilement dans un lecteur flash à partir de Cli ?

Comment chiffrer une clé USB dans Ubuntu - Chiffrement LUKS avec cryptsetup

Comment transférer des fichiers d'Ubuntu vers Ipad Air 4 avec une clé USB

Comment créer une clé USB amorçable Linux [Tutoriel]