Hostapd не запускается с udev

У меня проблема, я хочу запустить скрипт для запуска "hostapd", когда я вставляю адаптер vga/hdmi на свой Asus E200ha. Сценарий работает хорошо, когда я запускаю его непосредственно в командной строке, но не работает, когда он вызывается «udev».

Это строка для захвата udev:

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN="/home/user/hotspot.sh"

Это скрипт "hotspot.sh"

#!/bin/bash
exec >  /var/log/hotplug-vga.log 2>&1;
service NetworkManager stop
killall wpasupplicant
hostapd -dd /etc/hostapd/hostapd.conf &

Это файл «hostapd.conf».

interface=wlan0
ieee80211n=1
driver=nl80211
ssid=chingpro
hw_mode=g
channel=6
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

Когда я выполняю инструкцию "/usr/sbin/hostapd /home/user/hostapd.sh", все работает нормально:

wpasupplicant: aucun processus trouvé
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
ctrl_interface_group=0
nl80211: TDLS supported
nl80211: TDLS external setup
nl80211: Supported cipher 00-0f-ac:1
nl80211: Supported cipher 00-0f-ac:5
[...]
nl80211: assocresp_ies - hexdump(len=10): 7f 08 04 00 00 02 00 00 00 40
nl80211: Set wlan0 operstate 0->1 (UP)
netlink: Operstate: ifindex=18 linkmode=-1 (no change), operstate=6 (IF_OPER_UP)
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
wlan0: Setup of interface done.
ctrl_iface not configured!
[...]

Но когда я подключаю свой vga/hdmi, я вижу, что мой скрипт выполняется с журналом внутри «/var/log/hotplug-vga.log», но запуск «hostapd» не выполняется:

wpasupplicant: no process found
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
ctrl_interface_group=0
nl80211: TDLS supported
nl80211: TDLS external setup
nl80211: Supported cipher 00-0f-ac:1
nl80211: Supported cipher 00-0f-ac:5
nl80211: Supported cipher 00-0f-ac:2
nl80211: Supported cipher 00-0f-ac:4
nl80211: Supported cipher 00-0f-ac:6
nl80211: Supported cipher 00-0f-ac:13
nl80211: Supported cipher 00-0f-ac:11
nl80211: Supported cipher 00-0f-ac:12
nl80211: Supports Probe Response offload in AP mode
nl80211: Using driver-based off-channel TX
nl80211: Driver-advertised extended capabilities (default) - hexdump(len=8): 04 00 00 00 00 00 00 40
nl80211: Driver-advertised extended capabilities mask (default) - hexdump(len=8): 04 00 00 00 00 00 00 40
nl80211: Use separate P2P group interface (driver advertised support)
nl80211: Enable multi-channel concurrent (driver advertised support)
nl80211: use P2P_DEVICE support
nl80211: interface wlan0 in phy phy15
nl80211: Set mode ifindex 18 iftype 3 (AP)
nl80211: Setup AP(wlan0) - device_ap_sme=0 use_monitor=0
nl80211: Subscribe to mgmt frames with AP handle 0x557d15b300e0
nl80211: Register frame type=0xb0 (WLAN_FC_STYPE_AUTH) nl_handle=0x557d15b300e0 match=
nl80211: Register frame command failed (type=176): ret=-114 (Operation already in progress)
nl80211: Register frame match - hexdump(len=0): [NULL]
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211: Remove monitor interface: refcount=0
nl80211: Remove beacon (ifindex=18)
netlink: Operstate: ifindex=18 linkmode=0 (kernel-control), operstate=6 (IF_OPER_UP)
nl80211 driver initialization failed.
hostapd_interface_deinit_free(0x557d15b294c0)
hostapd_interface_deinit_free: num_bss=1 conf->num_bss=1
hostapd_interface_deinit(0x557d15b294c0)
wlan0: interface state UNINITIALIZED->DISABLED
hostapd_bss_deinit: deinit bss wlan0
wlan0: AP-DISABLED
hostapd_cleanup(hapd=0x557d15b2a730 (wlan0))
hostapd_free_hapd_data: Interface wlan0 wasn't started
hostapd_interface_deinit_free: driver=(nil) drv_priv=(nil) -> hapd_deinit
hostapd_interface_free(0x557d15b294c0)
hostapd_interface_free: free hapd 0x557d15b2a730
hostapd_cleanup_iface(0x557d15b294c0)
hostapd_cleanup_iface_partial(0x557d15b294c0)
hostapd_cleanup_iface: free iface=0x557d15b294c0

Я потратил много часов, чтобы понять разницу между отправкой этого скрипта напрямую или с помощью udev, но пока безуспешно.

Я работаю над новой установкой «debian buster».


Я устанавливаю Ubuntu 18.04 с теми же скриптами, и у меня те же проблемы: скрипт хорошо работает в командной строке, но терпит неудачу, когда он запускается udev!

Спасибо за вашу помощь


person Tom    schedule 18.06.2018    source источник


Ответы (2)


Во-первых, вы уверены, что «остановка службы NetworkManager» действительно работает? Многие проблемы с "запуском вручную, но не из cron/udev/initscript" вызваны различиями в PATH. Возможно, «сервис» находится не на пути от udev.

Во-вторых, это действительно команда, которую вы должны запустить? На https://bugs.launchpad.net/ubuntu/+source/wpa/+bug/1289047 рекомендуется следующее решение:

nmcli nm wifi off
rfkill unblock wlan

или в случае подозрительного пути, возможно, было бы лучше написать его как

/usr/bin/nmcli nm wifi off
/usr/sbin/rfkill unblock wlan
person Honza    schedule 20.01.2019

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

Я не знаю, почему hostapd ведет себя по-другому при вызове из udev, однако страница https://wiki.archlinux.org/index.php/udev#Spawning_long-running_processes дает решение, но предназначенное для другой проблемы. Идея состоит в том, чтобы передать выполнение hostapd демону вне udev, в данном случае atd. Этот демон находится в пакете «at» в Debian. После установки вы можете вызвать hostapd из скрипта udev с помощью

echo /usr/sbin/hostapd -B -P /path/to/pidfile /path/to/hostapd.config | сейчас

person user1542207    schedule 15.08.2020