Я пытаюсь выполнить "простую" задачу: запустить скрипт /usr/local/bin/USBTesting.sh при подключении определенного USB-устройства. Я создал /lib/udev/rules.d/99-USBTesting.rules /etc/udev/rules.d/10-USBTesting.rules потому что я не знал , куда их поместить. Для содержимого этих файлов я использовал все следующее (одно за другим):

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
ACTION==“add”, SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18a5”, SYSFS{idProduct}==“0304”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION=="add", KERNEL=="sd[a-z]*", RUN+=“/usr/local/bin/USBTesting.sh”
SYSFS{idVendor}==“18a5”, SYSFS{idProduct}==“0304”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION==“add”, SUBSYSTEM==“usb_device”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION==“add”, KERNEL=="sd*[!0-9]", RUN+=“/usr/local/bin/USBTesting.sh”
ATTRS{model}=="STORE N GO      ", ATTRS{vendor}=="Verbatim", RUN+=“/usr/local/bin/USBTesting.sh”
SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
KERNEL=="*", RUN+=“/usr/local/bin/USBTesting.sh”

И, конечно, выпустил печально известный sudo udevadm control --reload-rules и даже несколько раз перезапустил мой ноутбук "на всякий случай".

Содержимое /usr/local/bin/USBTesting.sh :

#!/bin/sh -e
set -u

echo $(date) Started >> /tmp/USBTesting.txt
echo $(date) Started >> /home/elemer/USBTesting.txt

Ничего сложного, просто тестирую на данный момент. sudo chmod +x /usr/local/bin/USBTesting.sh был применен. Если я запускаю /usr/local/bin/USBTesting.sh он делает то, что должен.

У меня действительно заканчиваются идеи. Кому-нибудь удалось получить что-то подобное, работающее на Ubuntu 14.04.1 LTS? Хотелось бы услышать правильное решение.

РЕДАКТИРОВАТЬ:RUN+=“/usr/local/bin/USBTesting.sh” это было в моем правиле udev. RUN+="/usr/local/bin/USBTesting.sh" это правильный. Неподготовленный глаз (как мой) не будет Найди отличие. И " разные. И похоже, что это имеет значение.

Мое новое правило udev выглядит так:SUBSYSTEM=="usb", ATTRS{serial}=="f88331611c905b", RUN+="/usr/local/bin/USBTesting.sh" или

SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh" - получил эту информацию от udevadm info -a -n sdc - возможно, потребуется изменить sdc на свой.

Теперь мой скрипт запускается, но дважды за каждый плагин.

РЕДАКТИРОВАТЬ 2: Оказывается, я должен был добавить ENV{DEVTYPE}=="usb_device" к правилу, и теперь оно выполняется только один раз. Вот так теперь выглядит мое правило.

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting"

2 ответа2

1

В Ubuntu 14.04.3 LTS sudo service udev restart очень важен:

Повсеместно в документации по udev говорится, что udev следит за изменениями в /etc/udev/rules.d/ , но это не относится к данному дистрибутиву, поэтому его нужно перезапускать каждый раз, когда меняются правила.

Если бы я растягивал волосы весь день! Спасибо, Криццо!

Мой /etc/udev/rules.d/test.rules: (все в одной строке) ACTION=="add", SUBSYSTEMS=="usb", ENV{ID_SERIAL}=="Lattice_Lattice_FTUSB_Interface_Cable", RUN+="/bin/sh -c 'echo blah > /var/log/test'"

Это просто перезаписать /var/log/test когда это конкретное устройство было подключено.

0

Я попробовал нечто подобное, и это сработало. Вы случайно не используете VirtualBox? У меня были проблемы с сохранением активности USB-порта, но Ubuntu 14.04 с ядром 4.0.5+ на нативном компьютере работает нормально. Мои различия сводили на нет то, что вы должны были (60-usb.rules):

RUN+=“/usr/local/bin/USBTesting.sh”

Я повторно использовал ваш скрипт для печати в /tmp/USBtesting.txt. Кроме того, единственная дополнительная команда была:

$ sudo service udev restart

После этого USBtesting.txt записывается 6 раз для каждого плагина. Если вы запускаете сценарий напрямую, вызывается ли файл USBtesting.txt?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .