USBデバイスが接続したときにスクリプトを自動的にアクティブにする方法はありますか?


12

USBデバイス(POVカメラ)を使用して大量のデータを収集し、定期的にストレージをいっぱいにしています。目標は、次のようなスクリプトを作成することです。

  1. USB経由で接続するデバイスをリッスンします
  2. ストレージデバイスとしてマウントします
  3. デバイスからデータをダウンロードします
  4. デバイスを安全にアンマウントして取り外します(ダウンロードの完了時に)

後でスクリプトに追加して、ステータスを示すためにGPIOの特定のピンに接続されたLEDを点滅させるオプションを追加できます...

ubuntuや他のLinuxサイトで「USBデバイスからデータを自動的にダウンロードする方法」を検索しましたが、結果はありませんでした。誰でも出発点を提供できますか?ドキュメンテーションと例からコードを書くことに慣れています。

回答:


13

udevルールを使用します。

デバイス情報を見つけます。

udevadm -a -p /dev/path/device/

KERNELS=="1-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
...
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="SANDisk"
ATTRS{product}=="USB DISK"
ATTRS{serial}=="SD71011000019113"

次に、デバイスのudevルールファイルを作成します。ルールファイルを作成するときは、udevinfoコマンドから取得した情報を使用します。

/etc/udev/rules.d/99-mydevice.rulesの内容

SUBSYSTEMS=="usb", ATTRS{serial}=="SD71011000019113", RUN+="/home/gurcan/sync.sh"

USBデバイスを接続した状態で実行するスクリプトを作成します

#!/bin/bash
#
rsync -avz /media/disk/photos/ /data/photos/

udevルールを再読み込み

udevcontrol reload_rules

試して。抜く/抜く


1
udevinfoを実行しようとしましたが-bash: udevinfo: command not found、sshシェルから応答がありました。チェックmanしたところ、のmanエントリはありますが、のエントリはudevありませんudevinfo。私はおそらくこれを追求しようとしudevます...あなたの答えは役に立ちましたが、ありがとう!私udevinfoも周りを調べて確認します。リポジトリなどをインストールしていない可能性があります。
user3.1415927 14

1
@ user3.1415927 debianではudevinfoがudevadmに置き換えられたため、回答を更新しました。
gurcanozturk 14

2

udevが気に入らない場合は、devmonを確認してください

次のオプションを使用できます。

--exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE --exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL --exec-on-video "COMMAND" Execute COMMAND after video DVD mount --exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion --exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount --exec-on-drive "COMMAND" Execute COMMAND after drive mount --exec-on-unmount "COMMAND" Execute COMMAND after unmount --exec-on-remove "COMMAND" Execute COMMAND after drive removal Where the following in COMMAND will be replaced with: %d mount point directory (eg /media/cd) %f device name (eg /dev/sdd1) %l label of mounted volume Multiple --exec-on-XXX options may be used to execute multiple commands. Other exec-on-XXX commands are ignored if exec-on-device or -label executed.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.