微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wpa_supplicant 没有接口pydbus

如何解决wpa_supplicant 没有接口pydbus

这是我使用 wpa_supplicant 的 D-Bus API 文档编写的简单代码

from pydbus import SystemBus

bus = SystemBus()
proxy = bus.get('fi.w1.wpa_supplicant1','/fi/w1/wpa_supplicant1')

print(proxy.Interfaces)

根据文档,它应该返回以下内容

一个包含 D-Bus 对象路径的数组,每个对象代表受控接口。

然而,它返回一个空数组,而我希望看到我的 wlan0 接口的路径。

我觉得我错过了上一步,但我完全不知道它是什么。

还有一些可能有用的东西:

  1. 运行 wpa_cli interface_list 没有任何回报。
  2. 运行 ls /var/run/wpa_supplicant/ 返回 p2p-dev-wlan0 wlan0
  3. 我不确定这有多相关,但我正在 RaspBerry Pi Zero W 上运行它。

编辑: 似乎 wpa_supplicant 不知道 wlan0 是什么。

我切换到 dbus-python 包以查看它是否有任何不同,并在尝试获取 wlan0 接口时收到以下错误

import dbus

bus = dbus.SystemBus()
wpas_obj = bus.get_object('fi.w1.wpa_supplicant1','/fi/w1/wpa_supplicant1')

wpas = dbus.Interface(wpas_obj,'fi.w1.wpa_supplicant1')
path = wpas.GetInterface('wlan0')

错误wpa_supplicant kNows nothing about this interface

我也发现了这个问题,this 问题,这似乎表明该问题与 wpa_supplicant 服务的配置有关,但这就是我目前所知道的。

解决方法

在经历了数周的痛苦之后,我为了完成而回答自己,并希望有一天这对其他人有用。

错误在于 wpa_supplicant 服务创建接口的方式。它所缺少的只是 -u 标志。

摘自 wpa_supplicant 手册:

-u     Enable DBus control interface. If enabled,interface definitions may be omitted. (This is only available if wpa_supplicant was built with the CONFIG_DBUS option.)

一旦我发现了错误,就很容易修复。但是,这里有关于如何解决此问题的进一步说明,以防万一您仍然有点迷茫。

只需编辑您的服务文件,它应该类似于wpa_supplicant@wlan0.service不是 wpa_supplicant.service,这部分很重要。然后在表示 -u 的行上附加 ExecStart 标志。

要编辑服务文件,您可以使用类似于

sudo systemctl edit nameofyour.service --full

并跟进

sudo systemctl restart nameofyour.service

之后您可能需要重新启动设备。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。