在 Linux 系统上systemd
,networkd
我需要在一个 WLAN 接口上操作 WLAN 接入点,同时在普通站(“客户端”)模式下操作其他(热插拔)WLAN 接口。
事实证明,wpa_supplicant.service
我的所有 WLAN 接口都已上线,如果所有这些 WLAN 接口都以站/客户端模式运行,那就没问题了。但是,虽然wpa_supplicant.service
提供 WLAN 接口,但不可能(不再可能)hostapd.service
以 AP 接入点模式运行该 WLAN 接口。
因此,我想wpa_supplicant.service
仅针对特定接口禁用,例如wls35u2
。我的想法是有一个[email protected]
单元,我可以有选择地禁用它,但保持wpa_supplicant.service
启用状态。但是,这似乎不起作用,或者我在中做错了什么[email protected]
。
那么,如何才能仅在特定接口上禁用 WPA 请求者服务,而不全局禁用它?
答案1
使用 /etc/dhcpcd.conf 中的“nohook wpa_supplicant”选项。如果您不想让 wlan0 使用 wpa_supplicant,则应这样做:
interface wlan0
nohook wpa_supplicant
答案2
我遇到了同样的问题。@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
此外,这将阻止任务栏中的网络管理器(GUI)显示该界面。
答案3
[编辑:查看@rweisse 的回答,找到更好的方法]
我在我的树莓派上遇到了完全相同的问题。
我发现wpa_supplicant@wlan0和wpa_supplicant@wlan1(我有两个 WLAN 接口)wpa_supplicant.service被禁用。
我设法找到了(至少在 raspbian 上,我不知道在其他 debian 版本上情况如何)DHCP服务器负责 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
现在,使用 hostapd 后,InterfaceWPASupplicantShouldBeDisabledOn 不再是问题。这个解决方案有点残酷,因为我不认为应该这样做,但我找不到任何有关如何以其他方式执行此操作的手册。
希望这可以帮助。