udev – это динамический диспетчер устройств для Linux, интеллектуально управляющий различными аппаратными устройствами, и он напрямую взаимодействует с ядром Linux.
Что, если вы хотите запускать определенные команды linux, когда в систему добавляется конкретное оборудование?
Допустим, запустить скрипт резервного копирования, когда Pendrive подключен.
Предыстория: я столкнулся со странной проблемой на ноутбуке под управлением Debian, правила udev не смогли переключить ключ USB 4G в режим модема из режима CD-ROM.
Поэтому я решил запускать скрипт оболочки всякий раз, когда подключался 4G-свисток, а не переключать его вручную.
Этот метод может быть реализован практически везде, но я использую приведенный выше пример, чтобы сделать учебник простым.
1. Подготовьте скрипт оболочки
Этот шаг зависит от ваших требований, напишите скрипт, который будет делать все, что вы хотите, и сохраните его где-нибудь, я сохраню его в папке /usr/local/bin.
Мой скрипт для переключения 4G-свистка,
#!/bin/sh # Switch 4G dongle usb_modeswitch -Q -v 1c9e -p f000 -V 1c9e -P 9605 \ -M "55534243123456788000000080000606f50402527000000000000000000000"
Теперь сделайте его исполняемым с помощью chmod + x
sudo chmod +x /usr/local/bin/switch_modem
2. Создайте сервис systemd
Поскольку прямой запуск скрипта из пользовательского правила udev не работает, мне пришлось создать новую службу systemd, чтобы запустить скрипт через него, когда устройство подключено, в данном случае USB-модем.
Созданные пользователем файлы службы systemd обычно хранятся в /etc/systemd/system/, я назову его switch_modem.service
sudo nano /etc/systemd/system/switch_modem.service
Файл службы systemd,
[Unit] Description=4G modem switcher [Service] Type=oneshot RemainAfterExit=no ExecStart=/usr/local/bin/switch_modem [Install] WantedBy=multi-user.target
3. Отредактируйте или создайте пользовательские правила udev.
Вы можете напрямую отредактировать нужное правило udev или создать новое правило в папке /etc/udev/rules.d/, я создаю новое правило
sudo nano /etc/udev/rules.d/40-switch_modem.rules
Мое пользовательское правило выглядит следующим образом
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f000", RUN+="switch_modem.service"
Теперь сохраните, выйдите и перезагрузите вновь созданные правила.
sudo udevadm control --reload-rules
Возможно, вам придется перезапустить службу udev:
sudo service udev restart
Или используйте это, если команда service не доступна
sudo systemctl restart systemd-udevd.service
В моем случае, теперь модем 4G переключается автоматически и работает нормально.
Заключение
Это руководство не ограничивается простым переключением неподдерживаемого модема 4G, его можно использовать для всего, что вы хотите запустить из события udev, то есть когда в систему добавляется новое оборудование.
Я надеюсь, что вы найдете этот урок полезным, и он достаточно прост для понимания.
Если у вас есть предложения или вопросы, пожалуйста, оставляйте комментарии, я буду рад услышать от вас :-).