web-dev-qa-db-ja.com

新しいUSBストレージデバイスが検出されたときにシェルスクリプトを実行する方法

ログをダンプし、USB大容量ストレージがプラグインされるとすぐにログオンを開始するスクリプトが必要です(ファイル 'OKdump'を使用)。スクリーンショットを撮って同じドライブに保存します。

17
Amith KK

Udevを使用します。 Udevはデバイスマネージャーデーモンです。とりわけ、デバイスの命名を担当します。 rulesディレクトリに特定の構文のファイルを配置することにより、udev-rulesを定義できます。ルールは多くのことを実行できます-特に、特定のデバイスが接続されたときにスクリプトを実行できます。

問題を解決する方法:

まず、デバイスの情報を収集する必要があります。接続したとしましょう。名前が/dev/sdb1であることがわかります。実行する場合:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

このコマンドは、デバイスに関する情報を出力します。かなり長いです。デバイスを一意に識別するものを見つける必要があります。 ATTRS{serial}=="UA04FLGC"のようなシリアル、またはATTRS{idVendor}ATTRS{idProduct}などの他の属性の組み合わせです。ほとんどの名前は多かれ少なかれ自明です。合理的と思われる1つまたはいくつかの組み合わせを選択します。機能しない場合は、別のものを試してください。

一意の識別子が見つかったら、/etc/udev/rules.dに2桁で始まり.rulesで終わるファイルを作成します。 2桁は、これらの.rulesファイルを処理する順序を指定します-70-usb-log-custom.rulesが適切な選択です。このルールファイルの構文は非常に複雑になる場合があります。興味があれば、udevをグーグルで検索してください。新しく作成したファイルを開いて、次のように編集するだけではない場合:

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

これは私が使用している実際のudevファイルです。 3つのルールがあります。すべての行は独自のルールです。最初の行は、暗号化されたディスクが接続されるたびに、復号化されたデバイスを作成するスクリプトを実行します。 2行目は、復号化されたデバイスが削除された場合に、異なるオプションで同じスクリプトを呼び出します。 3行目は、別の関連デバイスのアクセス許可を設定します。

ほとんどの場合、最初の行のみが必要です。残りを削除し、正しいシリアル(またはデバイスを識別するために選択したパラメーターの組み合わせ)を挿入します。

私のファイルの説明:

KERNEL=="sd?1"は、このルールで探しているデバイスは、/dev/sda1/dev/sdc1などの行に沿って名前が付けられていると言います。疑問符は、任意の文字のワイルドカードです。 ATTRS{serial}=="UA04FLGC"は、ここでの一意の識別子です。私が話していた他のデバイス(3行目)では、シリアル番号ではなく、SYSFS{idVendor}=="1781"SYSFS{idProduct}=="0c9f"の組み合わせを使用して識別しています。

ACTION=="add"は、デバイスが追加されたときにのみ動作するようにルールに指示します。削除されたときではありません。

SYMLINK+="cusb1"は、/dev/cusb1の下にあるディスクへのシンボリックリンクを作成します。

RUN+="/home/confus/bin/usb-encrypt.sh add %k"はスクリプトを実行し、 'add'と '%k'(デバイス名)を渡します。

Udevルールに関する優れたチュートリアルがあるので、これ以上詳しくは説明しません。あなたがここで読んだものは、しかし凝視するのに十分なはずです。

13
con-f-use