Я написал правило udev и поместил его в /etc/udev/rules/90-wifi.rules
ACTION=="add", SUBSYSTEM=="usb", DRIVER=="usb", RUN+="sh /usr/local/bin/setup_wifi_wrapper.sh"
Оно должно работать на каждом вставленном USB-устройстве.
Он должен запустить скрипт /usr/local/bin/setup_wifi_wrapper.sh
#!/bin/bash
/usr/local/bin/start_wifi.sh & disown
И это должно запуститься /usr/local/bin/start_wifi.sh
#!/bin/bash
sudo systemctl start hostapd
sudo ifup br0
sudo systemctl restart dnsmasq
touch /home/user/started
Но это не так ... Все сценарии являются исполняемыми, и я могу запустить их из командной строки, и они делают то, что должны. Я попытался разместить их в разных местах, начал в домашней папке и переместил их в usr / local / bin. Сделал обёртку с отречённым от фоновых процессов, но всё ещё без результатов. У кого-нибудь есть идея?
Заранее спасибо
От udev
страница справочника для RUN
:
Выполняют внешнюю программу, указанную как присвоенное значение. Если никакой полный путь не будет дан, то программа, как ожидают, будет жить в
/lib/udev
; иначе полный путь должен быть указан.
sh
не находится в /lib/udev
.
, Кроме того, путем начала sh
скрипт запущен интерпретатором Sh. Однако из командной строки, вероятно, никакой интерпретатор не был дан, таким образом, #!/bin/bash
строка будет использоваться для выбора Bash.
Эти disown
конкретный Bash. Поэтому просто удалите продвижение sh
из этой части правила:
RUN+="/usr/local/bin/setup_wifi_wrapper.sh"
измените udev-правило
ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="usb", RUN+="/bin/sh /usr/local/bin/setup_wifi_wrapper.sh"
, я избежал бы ВЫПОЛНЕНИЯ + Ключ.
И Ваш сценарий
#!/bin/sh
/bin/sleep 10
systemctl start hostapd &&
ifup br0 &&
systemctl restart dnsmasq &&
touch /home/user/started
последовательность только работает, если каждая команда успешна.