web-dev-qa-db-ja.com

USBフラッシュドライブが挿入されるたびにC ++プログラムを実行する方法

USBペンドライブ/フラッシュドライブにアクセスするC++プログラムがあります。現在挿入されているフラッシュドライブで機能します。通常のC++プログラムは、実行するまで実行されません。しかし、フラッシュドライブが挿入されるたびにプログラムが自動的に実行されるようにしたかったのです。どうやってやるの?

9
vinayawsm

一般的な用途、USBストレージでプログラムを実行する場合。ルールの一致にドライバーを使用します。

  1. udevルールファイルを追加します

    Sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. このルールを追加

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

    プログラムがディスクを区別して、異なる操作を実行するようにしたい場合は、次を使用します(シリアル番号または任意の属性を渡すことができます)。

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
    
  3. すべてのルールをリロードする

    Sudo udevadm control --reload-rules
    
  4. フラッシュドライブを取り外して再接続する

注:

  • このルールを使用して、ルールがトリガーされたときにログを作成するものをテストしました。

    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'"
    
  • 行の先頭に#を追加することにより、不要なルールをコメント化できます。ルールファイルには複数のルールを含めることができます。

  • 使用可能なすべてのenv変数を確認するには、次を使用します。

    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'"
    
  • ルールの一致に使用するパラメーターを確認するには、次を実行します。

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

参照:

7
user.dz

udevを使用して、任意のコマンドを実行できます。動作させるには、/etc/udev/rules.d/でルールを作成します:

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

そして入力してください:

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

注:XXXXおよびYYYYの値は、lsusb出力から取得されます。

5
Frantique