Я хотел бы, чтобы сценарий оболочки выполнился каждый раз, когда я вставляю USB-модем.
Как я сделал бы это?
Можно выполнить это с некоторыми правилами udev, как @Rinzwind предложенный.
Во-первых, сохраните свой сценарий к где-нибудь доступному другими пользователями. Например, Вы могли сохранить его как /usr/local/bin/script.sh
.
Теперь, сделайте сценарий доступным другими.
sudo chmod 555 /usr/local/bin/script.sh
Теперь, включите свой USB-модем и затем работайте lsusb
. Ниже вывод в качестве примера:
$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 0fcf:1008 Dynastream Innovations, Inc. Mini stick Suunto
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Найдите строку с названием своего модема в конце. Теперь, найдите часть около середины в формате ID XXXX:####
. XXXX
и ####
части будут, идентификатор Поставщика и идентификатор Устройства соответственно.
Для этого примера для третьей строки, которая читает … ID 0fcf:1008 Dynastream …
, идентификатор поставщика 0fcf
и идентификатор Устройства 1008
. Ваше устройство будет иметь различные значения для этих идентификаторов.
Теперь, мы будем использовать эти идентификаторы для создания правила для udev.
Теперь, создайте правило для этого устройства с udev.
Сделайте файл правил с
sudo nano /etc/udev/rules.d/90-local.rules
Добавьте следующую строку:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{vendor}=="0xXXXX", ATTRS{device}=="0x####", RUN+="/usr/local/bin/script.sh"
Замена XXXX
с идентификатором поставщика от ранее, и замена ####
с идентификатором продукта от ранее.
Теперь, вынудите udev перезагрузить, это - правила (альтернативно, Вы могли пропустить этот шаг и перезагрузку),
udevadm control --reload-rules
sudo service udev restart
И Вы сделаны!
Источники: Подобный вопрос на SU относительно правил udev, Создавая udev Правила