Я пытаюсь выполнить сценарий каждый раз, когда 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
файл.
Каждое 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-устройств. Таким образом, они могут использоваться для соответствия правила.