GNU/Linux >> Linux の 問題 >  >> Ubuntu

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

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

承認された回答:

一般的な使用のために、任意の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
    

参照:

  • udevスクリプトの引数としてATTR{idVendor}を渡します
  • DanielDrakeによるudevルールの作成

Ubuntu
  1. USB(フラッシュ)ドライブのコンテンツを別のディレクトリに自動的にコピーするにはどうすればよいですか?

  2. Macで起動可能なUSBを作成できませんか?

  3. LinuxでUSBフラッシュドライブをマウントする方法

  1. Ubuntu18.04LTSでUSBドライブを暗号化する方法

  2. USBフラッシュドライブにUbuntuをインストールする方法

  3. USB フラッシュ ドライブに起動可能な Memtest86+ を作成する方法は?

  1. Elementary OS / Ubuntuでハードディスク、USBフラッシュドライブ、SDカードをフォーマットする方法

  2. 起動可能なUbuntuLiveUSBドライブを作成する方法

  3. USBフラッシュドライブに完全なUbuntuをインストールする方法