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

The*_*veO 10 debian linux-networking systemd

在 Linux 系统上systemdnetworkd我需要在一个 WLAN 接口上运行 WLAN 接入点,同时在正常站(“客户端”)模式下运行更多(热插拔)WLAN 接口。

事实证明,wpa_supplicant.service在我所有的 WLAN 接口上都可以使用,如果所有这些 WLAN 接口都可以在工作站/客户端模式下运行,那就没问题了。但是,虽然wpa_supplicant.service提供 WLAN 接口,但不可能(不再?)hostapd.service在 AP 接入点模式下运行该 WLAN 接口。

所以我只想禁用wpa_supplicant.service特定接口,比如wls35u2. 我的想法是有一个wpa_supplicant@wls35u2.service我可以有选择地禁用但保持wpa_supplicant.service启用状态的单元。但是,这似乎不起作用,或者我在wpa_supplicant@wls35u2.service.

那么,如何仅在特定接口上禁用 WPA 请求方服务而不全局禁用它?

小智 12

使用 /etc/dhcpcd.conf 中的“nohook wpa_supplicant”选项。如果您不希望 wpa_supplicant 用于 wlan0,这将是:

interface wlan0
        nohook wpa_supplicant
Run Code Online (Sandbox Code Playgroud)


Luc*_*cas 3

[编辑:看看@rweisse 的答案以获得更好的方法]

我的树莓派也遇到了同样的问题。

我发现wpa_supplicant@wlan0wpa_supplicant@wlan1(我有两个 wlan 接口)和wpa_supplicant.service都被禁用。

我设法找到(至少在 raspbian 上,我不知道在其他 debian 版本上是如何)dhcpcd负责wpa_supplicant 启动。

/lib/dh​​cpcd/dhcpcd-hooks下,有一个名为“10-wpa-supplicant”的文件,您可以在其中找到 wpa_supplicant 的启动/重新配置/停止过程。

在这个文件中,我只是添加了正在处理的$interface 的条件。对于每个 PROCEDURE_NAME(启动/停止/重新配置):

PROCEDURE_NAME( )
    if [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] then
        Code of the prodecure
    else
        return 0
    fi
Run Code Online (Sandbox Code Playgroud)

之后,我重新启动了 dhcpcd 服务

systemctl restart dhcpcd
Run Code Online (Sandbox Code Playgroud)

现在,使用 hostapd 时 InterfaceWPASupplicantShouldBeDisabledOn 不再是问题。这个解决方案有点残酷,因为我不认为应该这样做,但我找不到任何关于如何以另一种方式做到这一点的手册。

希望这可以帮助。