python - 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 接口的路径。
我觉得我错过了前一步,但我完全不知道它是什么。
还有一些可能有用的东西:
- 运行
wpa_cli interface_list
什么也不返回。 - 跑步
ls /var/run/wpa_supplicant/
回报p2p-dev-wlan0 wlan0
- 我不确定这有多相关,但我在 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
解决方案
经过数周的痛苦,我为了完成而回答自己,并希望有一天这对其他人有用。
错误在于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
之后您可能需要重新启动设备。
推荐阅读
- python - python patsy:加权效应编码又名加权和(偏差)编码
- android - 在 GCP api 网关中发送签名证书的 SHA 1 指纹作为 api 密钥验证的一部分是否安全?
- bootstrap-4 - Plotly Dash:由于滚动,下拉菜单在 DataTable 中不可见
- image - WhatsApp跟踪和匹配图像
- yaml - 如何将 .env 文件连接到 config.yml?
- ios - IOS,如何删除ViewControllers之间的半暗过渡动画
- terraform - 如何在 Terraform 中创建尚不存在的 IAM 角色?
- angular - 错误:
属性变换:预期数字,“translate(NaN, 0) scale(1)”。顶点图 - java - 用正则表达式替换第一行文本中所有出现的特定字符
- c++ - 查找来自不同数组的元素组合