回答:
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ルールに関する優れたチュートリアルがあるので、これ以上詳しくは説明しません。あなたがここで読んだものは、しかし凝視するのに十分なはずです。