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


9

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

回答:


7

一般的な用途で、任意の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
    

参照:


2
私はこのアプローチが好きで、賛成です。おめでとうございます!
Frantique

2
+150:正解:(AFAIKは承認されたよりも優れています)これは、どのUSBデバイスにも一般的なルールになります。認められた回答では、USBはVIDとPIDに制限されています。
Helio

5

を使用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"

注:ザ・XXXXYYYY値から取得されますlsusb出力。


同意しません。結局のところ、C ++プログラムは「コマンド」です。ユーザーは、そのコマンドをトリガーするソリューションを求めています。(ただし、「フラッシュドライブが挿入されたときにプログラムを自動的に実行したいのですが、どうすればよいですか?」
Frantique

lsusbの this [ ideone.com/uOReNj ]出力の場合、XXXXand の値はどうなりますYYYYか?
vinayawsm

ペンドライブがキングストンの場合:XXXX = 0951、YYYY = 162f。
Frantique

ペンドライブごとにコードをトリガーさせるために、「my-usb-device.rules」ファイルを常に更新する必要がありますか?
vinayawsm

すべてのデバイスにルールを作成する必要があります。または、C ++コードをリファクタリングしてデーモンとして実行し、udevトリガーを監視します。
Frantique
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.