GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie führt man ein C++-Programm aus, wenn ein USB-Flash-Laufwerk eingesteckt wird?

Ich habe ein C++-Programm, das auf USB-Sticks/Flash-Laufwerke zugreift. Es funktioniert für das aktuell eingelegte Flash-Laufwerk. Ein normales C++-Programm wird erst ausgeführt, wenn wir es ausführen. Aber ich wollte, dass das Programm automatisch ausgeführt wird, wenn ein Flash-Laufwerk eingesteckt wird. Wie kann ich das tun?

Akzeptierte Antwort:

Für den allgemeinen Gebrauch, wenn Sie Ihr Programm für einen beliebigen USB-Speicher ausführen möchten. Verwenden Sie den Treiber für den Regelabgleich.

  1. Fügen Sie ein udev hinzu Regeldatei

    sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. Diese Regel hinzufügen

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

    Wenn Sie möchten, dass Ihr Programm die Festplatten unterscheidet, damit es verschiedene Operationen ausführt, verwenden Sie (Sie können die Seriennummer oder ein beliebiges Attribut übergeben):

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
    
  3. Alle Regeln neu laden

    sudo udevadm control --reload-rules
    
  4. Trennen Sie das Flash-Laufwerk und schließen Sie es wieder an

Hinweise:

  • Ich habe diese Regel nur zum Testen verwendet, die ein Protokoll erstellt, wenn die Regel ausgelöst wird:

    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'"
    
  • Sie können die Regeln, die Sie nicht möchten, kommentieren, indem Sie # hinzufügen zum Zeilenanfang. Die Regeldatei kann mehrere Regeln enthalten.

  • Um alle verfügbaren env zu überprüfen Variablen, verwenden Sie:

    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'"
    
  • Um nach Parametern zu suchen, die für die Regelübereinstimmung verwendet werden sollen, führen Sie Folgendes aus:

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

Referenzen:

  • Übergeben Sie ATTR{idVendor} als Argument im udev-Skript
  • Udev-Regeln schreiben von Daniel Drake

Ubuntu
  1. So verschlüsseln Sie ein USB-Laufwerk unter Ubuntu 18.04 LTS

  2. Wie kopiert man automatisch den Inhalt eines USB-Laufwerks (Flash) in ein anderes Verzeichnis?

  3. Kann USB auf dem Mac nicht bootfähig machen?

  4. So mounten Sie ein USB-Flash-Laufwerk unter Linux

  5. Wie erstelle ich einen bootfähigen Memtest86+ auf einem USB-Stick?

So erstellen Sie ein bootfähiges Ubuntu 22.04-USB-Laufwerk unter Windows

Wie zeigt man eine Benachrichtigung an, wenn ein USB-Gerät eingesteckt wird?

Wie kann man einfach von Cli auf ein Flash-Laufwerk cd?

So verschlüsseln Sie ein USB-Flash-Laufwerk in Ubuntu – LUKS-Verschlüsselung mit cryptsetup

So übertragen Sie Dateien von Ubuntu auf das Ipad Air 4 mit einem USB-Flash-Laufwerk

So erstellen Sie ein bootfähiges Linux-USB-Flash-Laufwerk [Tutorial]