如何使用 dbus 和 NetworkManager 激活连接

Posted

技术标签:

【中文标题】如何使用 dbus 和 NetworkManager 激活连接【英文标题】:How to use dbus and NetworkManager to activate a connection 【发布时间】:2020-04-03 03:35:56 【问题描述】:

根据我之前的 SO 问题,我仍在努力通过 Java 应用程序中的 dbus 控制 NetworkManager。我想激活现有的无线连接,所以这是我的代码,尽可能去除无关紧要的内容:

DBusInterface iface = ...;
var nmIface = (NetworkManagerIface) instance.getRemoteObject(NetworkManagerIface._NM_IFACE, NetworkManagerIface._NM_PATH, NetworkManagerIface.class);
System.out.println("Attempting connection to " + iface.getObjectPath());
var result = nmIface.ActivateConnection(new DBusPath(iface.getObjectPath()), new DBusPath("/"), new DBusPath("/"));
System.out.println("Activate Connection " + result.getPath());

其中NetworkManagerIface 是here。 这运行正常并打印:

Attempting connection to /org/freedesktop/NetworkManager/Settings/4
Activate Connection /org/freedesktop/NetworkManager/ActiveConnection/4

所以看起来对ActivateConnection 的调用有效,因为它返回了一些合理的东西。但是,nmcli c show 命令将连接显示为在使用中。

NetworkManager 在我们的系统中拥有八个连接:

# dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Settings org.freedesktop.DBus.Properties.Get string:org.freedesktop.NetworkManager.Settings string:Connections
method return time=1575940954.061910 sender=:1.8 -> destination=:1.70 serial=9361 reply_serial=2
   variant       array [
         object path "/org/freedesktop/NetworkManager/Settings/2"
         object path "/org/freedesktop/NetworkManager/Settings/7"
         object path "/org/freedesktop/NetworkManager/Settings/3"
         object path "/org/freedesktop/NetworkManager/Settings/5"
         object path "/org/freedesktop/NetworkManager/Settings/4"
         object path "/org/freedesktop/NetworkManager/Settings/8"
         object path "/org/freedesktop/NetworkManager/Settings/1"
         object path "/org/freedesktop/NetworkManager/Settings/6"
      ]

现有连接是有线(以太网)连接,我想添加无线连接。为什么我的ActivateConnection 电话不这样做?

【问题讨论】:

【参考方案1】:

如果ActivateConnection 调用返回成功,但之后配置文件实际上并未激活/激活,则按理说不久之后的激活失败。

查看 NetworkManager 的日志文件以了解激活失败的原因。可能启用level=TRACE 日志记录,有关日志记录的提示请参阅https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/contrib/fedora/rpm/NetworkManager.conf#n28。

您也可以在另一个终端中运行nmcli monitor,以了解会发生什么。

现有连接是有线(以太网)连接,我想添加无线连接

您要添加连接配置文件吗?这不是ActivateConnection 所做的。请参阅AddConnection 和一般 D-Bus API:https://developer.gnome.org/NetworkManager/stable/spec.html

为什么我的 ActivateConnection 调用不这样做?

对不起,我不明白。做什么?

【讨论】:

以上是关于如何使用 dbus 和 NetworkManager 激活连接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 dbus 和 NetworkManager 激活连接

如何使用 CMake 配置 DBus 依赖项

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

如何使用 Python 在自定义 dbus 上导出对象?

如何在 Windows 上编译和使用 java-dbus 2.7?

如何使用 dbus 连接 HAL