USBが接続されるたびにスクリプトを実行しようとしています。私が現在持っているのは、/usr/local/test.sh
のデモスクリプトです:
#!/bin/bash
touch /home/kfir/test.txt
/etc/udev/rules.d/100-usb.rules
内の任意のUSBに一致させようとするルールファイルもあります。
ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/test.sh"
問題は、test.txt
ファイルが作成されないことです。また、次のエラーが表示されます。
今何をすればいいのか分からない。私が達成したいのはかなり簡単です。USBストレージデバイスが接続されている場合、簡単なスクリプトを実行します(この場合はtest.txtファイルを作成します)。
追伸test.sh
ファイルは正常に機能しています。手動で実行すると、test.txt
ファイルが作成されます。
すべてのUSBデバイス? /etc/udev/rules.d/100-usb.rules
でこの単純な行を使用します
ACTION=="add", RUN+="/bin/mkdir /tmp/folder1"
udev
を再起動します
Sudo service udev restart
これは消耗品です
ATTRS{idVendor}=="****", ATTRS{idProduct}=="****",
これらのATTRS{idVendor}=="****", ATTRS{idProduct}=="****"
は何でも対象とします。ルールから削除できます。
ただし、その方法は、多くのツリーノードと、USB以外のすべてのデバイスに対してトリガーされます。
単一のノードとUSBデバイスのみをターゲットとするこのルールを試してください。
ACTION=="add", SUBSYSTEM=="usb", DRIVER=="usb", RUN+="/usr/local/test.sh"
どうやってそれを得たか:
udevadm monitor -u
を実行しますフラッシュドライブを接続すると、次のように出力されます。
UDEV [13394.985946] add /devices/pci0000:00/0000:00:14.0/usb1/1-3 (usb)
UDEV [13394.991173] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0 (usb)
UDEV [13394.992509] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9 (scsi)
UDEV [13394.993436] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/scsi_Host/host9 (scsi_Host)
UDEV [13395.978250] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0 (scsi)
UDEV [13395.979665] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0 (scsi)
UDEV [13395.980363] add /devices/virtual/bdi/8:32 (bdi)
UDEV [13395.981822] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0/scsi_disk/9:0:0:0 (scsi_disk)
UDEV [13395.982998] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0/bsg/9:0:0:0 (bsg)
UDEV [13395.983447] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0/scsi_device/9:0:0:0 (scsi_device)
UDEV [13395.983970] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0/scsi_generic/sg4 (scsi_generic)
UDEV [13396.473531] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0/block/sdc (block)
UDEV [13396.528471] add /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host9/target9:0:0/9:0:0:0/block/sdc/sdc1 (block)
次を使用して、ヘッドノードの属性を確認します。
udevadm info -a --path=/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3
出力:
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-3':
KERNEL=="1-3"
SUBSYSTEM=="usb"
DRIVER=="usb"
ATTR{bDeviceSubClass}=="00"
ATTR{bDeviceProtocol}=="00"
ATTR{devpath}=="3"
ATTR{idVendor}=="125f"
ATTR{speed}=="480"
ATTR{bNumInterfaces}==" 1"
ATTR{bConfigurationValue}=="1"
ATTR{bMaxPacketSize0}=="64"
ATTR{busnum}=="1"
ATTR{devnum}=="5"
ATTR{configuration}==""
ATTR{bMaxPower}=="98mA"
ATTR{authorized}=="1"
ATTR{bmAttributes}=="80"
ATTR{bNumConfigurations}=="1"
ATTR{maxchild}=="0"
ATTR{bcdDevice}=="0100"
ATTR{avoid_reset_quirk}=="0"
ATTR{quirks}=="0x0"
ATTR{serial}=="2b712383811292"
ATTR{version}==" 2.00"
ATTR{urbnum}=="673"
ATTR{ltm_capable}=="no"
ATTR{manufacturer}=="ADATA"
ATTR{removable}=="unknown"
ATTR{idProduct}=="c96a"
ATTR{bDeviceClass}=="00"
ATTR{product}=="ADATA USB Flash Drive"
これで、電話、マウスなどのデバイスをさらにチェックすると、1つのデバイスのみをチェックしました。SUBSYSTEM=="usb"
とDRIVER=="usb"
はすべてのUSBデバイスで同じであることがわかります。したがって、ルールの一致に使用できます。