systemd:如何有选择地禁用特定 WLAN 接口的 wpa_supplicant?

systemd:如何有选择地禁用特定 WLAN 接口的 wpa_supplicant?

在 Linux 系统上systemdnetworkd我需要在一个 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@wlan0wpa_supplicant@wlan1(我有两个 WLAN 接口)wpa_supplicant.service被禁用。

我设法找到了(至少在 raspbian 上,我不知道在其他 debian 版本上情况如何)DHCP服务器负责 wpa_supplicant 的启动。

在下面的/lib/dh​​cpcd/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 不再是问题。这个解决方案有点残酷,因为我不认为应该这样做,但我找不到任何有关如何以其他方式执行此操作的手册。

希望这可以帮助。

相关内容