您如何真正使用 dbus 从 NetworkManager 获取可见 SSID 列表?

Posted

技术标签:

【中文标题】您如何真正使用 dbus 从 NetworkManager 获取可见 SSID 列表?【英文标题】:How do you really use dbus to obtain the list of visible SSIDs from NetworkManager? 【发布时间】:2020-03-05 18:08:28 【问题描述】:

根据示例 12 here 我应该可以使用

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Devices/4 org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints

发现所有可用的无线接入点,因为/org/freedesktop/NetworkManager/Devices/4 是我的无线适配器。但是,它似乎返回的结果与命令行等效项不同

nmcli device wifi list

返回更多的 SSID。在工作中尝试上述方法时,我只能通过 dbus-send 获得一个 SSID。在家里,我第一次运行dbus-send 命令时,它返回了一个包含四个接入点的数组,这与nmcli 返回的数字相同。我再次运行了相同的dbus-send 命令,这一次它生成了一个只有一个接入点的列表,就像在工作中一样。

第二天在家里我尝试了几次dbus-send 命令,它只列出了一个接入点。然后我再次运行nmcli 命令,它列出了五个接入点。之后,dbus-send 命令还列出了五个接入点。似乎nmcli 命令在某种程度上比dbus-send 命令更进一步发现接入点,但是一旦这样做,dbus-send 命令也能够找到接入点。但实际情况并非如此:nmcli 命令总是发现 12 个或更多 AP,但 dbus-send 命令只发现一个。

我肯定只有一个无线适配器:ifconfig -a 列表:enp0s25、lo、sit0 和 wlp3s0。

nmcli 命令有什么 dbus-send 命令没有的功能?

【问题讨论】:

【参考方案1】:

答案是您必须在获取 SSID 列表之前运行重新扫描(方法 RequestScan)。

【讨论】:

以上是关于您如何真正使用 dbus 从 NetworkManager 获取可见 SSID 列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行发出 dbus 信号

如何使用 dbus 连接 HAL

如何从python将'a sv' dbus签名传递给udisks2.Mount()?

如何使用 qt-dbus 将错误返回到 dbus?

如何从控制台创建 dbus 服务?

如何通过 dbus 调用 varargs 函数?