7

Я хотел бы написать системный сервис, который зависит от присутствия USB WiFi ключа. Его не нужно запускать, когда устройство подключено, если оно не запускается, когда устройство не подключено. Как мне этого добиться?

Файл конфигурации systemd находится в формате network @ .conf. Он использует заполнитель %i . Поэтому я попытался добавить это в файл модуля:

[Path]
PathExists = /dev/%i

Где %i был бы что-то вроде wlan0 . К сожалению, это полностью игнорируется, поэтому я не могу понять, как правильно использовать этот раздел.

Я также попробовал:

[Unit]
....
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

Я это взял откуда-то (я забыл где), и это тоже не работает.

1 ответ1

7

Вам нужно объединить udev и systemd.

Добавьте новое правило для udev в /etc/udev/rules.d/95-mywifi.rules следующим образом:

 ACTION=="add", ATTRS{idVendor}=="...", ATTRS{idProduct}=="...", SYMLINK=="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="netctl-auto@mywifi.service"

(Вы должны заменить точками коды поставщиков и продуктов, соответствующие вашему ключу).

Существующее netctl-auto @ .service - это:

  # cat /lib/systemd/system/netctl-auto\@.service 
  [Unit]
  Description=Automatic wireless network connection using netctl profiles
  Documentation=man:netctl.special(7)
  BindsTo=sys-subsystem-net-devices-%i.device
  After=sys-subsystem-net-devices-%i.device
  Before=network.target
  Wants=network.target

  [Service]
  ExecStart=/usr/bin/netctl-auto start %I
  ExecStop=/usr/bin/netctl-auto stop %I
  RemainAfterExit=yes
  Type=forking

  [Install]
  WantedBy=multi-user.target

Чтобы это работало, вам нужно будет настроить профиль netctl , посмотрите Arch Linux Wiki, чтобы узнать, как это сделать.

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