Я пытаюсь выполнить скрипт всякий раз, когда USB подключен. В настоящее время у меня есть демонстрационный скрипт в /usr/local/test.sh:
#!/bin/bash
touch /home/kfir/test.txt
У меня также есть файл правил, который пытается соответствовать любому USB в /etc/udev/rules.d/100-usb.rules:
ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/test.sh"
Проблема в том, что файл test.txt никогда не создается. Я также получаю следующую ошибку:
Я не знаю, что делать сейчас. То, что я хочу достичь, довольно просто, когда есть USB-накопитель, подключенный к сети, запустите простой скрипт (создав в этом случае файл test.txt).
P.S. файл test.sh работает нормально. Когда я вручную ее запускал, он создает файл test.txt.
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"
Теперь мы проверили только одно устройство, если мы проверим больше устройств: телефон, мышь ... мы узнаем, что SUBSYSTEM=="usb" и DRIVER=="usb" одинаковы для всех USB-устройств. Поэтому они могут использоваться для соответствия правилам.