В системе Linux с systemd
и networkd
Мне необходимо управлять точкой доступа WLAN на одном интерфейсе WLAN, а в дальнейшем (горячее подключение) интерфейсы WLAN работать в обычном режиме станции («клиент»).
Как оказывается, wpa_supplicant.service
работает на всех моих интерфейсах WLAN, и это было бы хорошо, если бы все эти интерфейсы WLAN работали в режиме «станция / клиент». Однако пока wpa_supplicant.service
обслуживает интерфейс WLAN, невозможно (больше?) hostapd.service
работает с этим интерфейсом WLAN в режиме точки доступа AP.
Итак, я хочу отключить wpa_supplicant.service
только для определенного интерфейса, скажем wls35u2
. Моя идея заключалась в том, чтобы иметь wpa_supplicant@wls35u2.service
блок, который я могу выборочно отключить, но оставить wpa_supplicant.service
включен. Однако, похоже, это не работает или я что-то делаю не так в wpa_supplicant@wls35u2.service
.
Итак, как я могу отключить службу запроса WPA только на определенном интерфейсе, не отключая ее глобально?
Используйте параметр «nohook wpa_supplicant» в /etc/dhcpcd.conf. Если вам не нужен wpa_supplicant для wlan0, это будет:
interface wlan0
nohook wpa_supplicant
У меня такая же проблема. @Nproject нашел хорошее решение. Но вам не нужно изменять каждую из этих процедур. Просто перейдите в конец упомянутого файла Nproject (/lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant
) и измените следующее предложение if:
ОРИГИНАЛ
if [ "$ifwireless" = "1" ] && \
type wpa_supplicant >/dev/null 2>&1 && \
type wpa_cli >/dev/null 2>&1
then
case "$reason" in
PREINIT) wpa_supplicant_start;;
RECONFIGURE) wpa_supplicant_reconfigure;;
DEPARTED) wpa_supplicant_stop;;
esac
fi
Добавить [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ]
в этом случае:
ИЗМЕНЕНО
if [ "$ifwireless" = "1" ] && [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] && \
type wpa_supplicant >/dev/null 2>&1 && \
type wpa_cli >/dev/null 2>&1
then
case "$reason" in
PREINIT) wpa_supplicant_start;;
RECONFIGURE) wpa_supplicant_reconfigure;;
DEPARTED) wpa_supplicant_stop;;
esac
fi
Кроме того, это предотвратит отображение этого интерфейса в Network Manager (GUI) на панели задач.
[РЕДАКТИРОВАТЬ: посмотрите ответ @rweisse, чтобы узнать, как это лучше сделать]
У меня была такая же проблема на моем raspberry pi.
Я обнаружил, что оба wpa_supplicant @ wlan0 и wpa_supplicant @ wlan1 (У меня есть два интерфейса wlan) и wpa_supplicant.service были отключены.
Мне удалось найти (по крайней мере, на raspbian, я не знаю, как в других выпусках debian), что dhcpcd отвечает за запуск wpa_supplicant.
Под / lib / dhcpcd / dhcpcd-крючки, есть файл с именем "10-WPA-запросчик", в котором вы можете найти процедуры запуска / перенастройки / остановки для wpa_supplicant.
В этом файле я просто добавил условие на $ интерфейс в процессе. Для каждой PROCEDURE_NAME (запуск / остановка / перенастройка):
PROCEDURE_NAME( )
if [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] then
Code of the prodecure
else
return 0
fi
После этого я перезапустил службу dhcpcd с помощью
systemctl restart dhcpcd
Теперь InterfaceWPASupplicantShouldBeDisabledOn больше не является проблемой при использовании hostapd. Это решение довольно жесткое, так как я не думаю, что это должно быть сделано так, но я не смог найти никакого руководства о том, как это сделать по-другому.
Надеюсь это поможет.