👩👦 Как запускать скрипта оболочки из правил udev |

👩👦 Как запускать скрипта оболочки из правил udev

Мануал

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, то есть когда в систему добавляется новое оборудование.

Я надеюсь, что вы найдете этот урок полезным, и он достаточно прост для понимания.

Если у вас есть предложения или вопросы, пожалуйста, оставляйте комментарии, я буду рад услышать от вас :-).

 

 

 

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий