在网络管理器的直接 dbus 控制中模拟 nmcli --ask

Posted

技术标签:

【中文标题】在网络管理器的直接 dbus 控制中模拟 nmcli --ask【英文标题】:simulating nmcli --ask in direct dbus control of networkmanager 【发布时间】:2020-03-14 08:59:24 【问题描述】:

我正在研究一个 Java 软件产品,并用通过 dbus 更直接地控制 NetworkManager 来替换对 nmcliexec() 调用。我被困在nmcli connection up (ourconnection) --ask;具体来说,它的--ask 位。

我知道这将是对 ActivateConnection 的调用,如NetworkManager documentation 中所述,但看不到如何模拟--ask。当您指定 --ask 时,是 NetworkManager 采用并执行的选项,还是 nmcli 在将密码传递给 NetworkManager 之前要求输入密码?

这个问题专门针对--ask;我大体上了解如何使用从反射 API 调用获得的 Java 类通过 dbus 与 NetworkManager 进行交互,并且一直在这样做以获取 SSID、设备和连接的列表,以及为诸如 之类的信号设置处理程序接入点添加;但我不知道如何以编程方式告诉 NetworkManager 提示人类用户输入密码。

【问题讨论】:

在使用 nmcli --ask 与不使用 --ask 时尝试使用 Bustle (gitlab.freedesktop.org/bustle/bustle) 捕获 D-Bus 流量,看看有什么不同。 【参考方案1】:

由于其他原因,我不得不深入到nmcli的source code,发现密码是由nmcli请求并通过dbus传递的。

【讨论】:

以上是关于在网络管理器的直接 dbus 控制中模拟 nmcli --ask的主要内容,如果未能解决你的问题,请参考以下文章

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

在linux中网络管理器的接口“org.freedesktop.NetworkManager.Device”上生成的信号名称

Dbus——故障控制

使用 DBus 控制 Gnome 音量

通过 python 和 dbus 启动用户 systemd 服务

网络管理器 Dbus 代码“aass”的含义