我正在调用 ListConnections 方法来列出系统上已配置的所有连接。我正在尝试使用网络管理器的 getSettings 方法来检索每个连接的 id,然后使用 Delete 方法删除特定的连接问题是,我不能只获取 id。我举了一个例子:https ://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/C/qt/change-ipv4-addresses.cpp
我的代码:
#include <QtDBus/QtDBus>
typedef QMap<QString, QMap<QString, QVariant> > Connection;
Q_DECLARE_METATYPE(Connection)
Q_DECLARE_METATYPE(QList<uint>);
Q_DECLARE_METATYPE(QList<QList<uint> >);
const QString NM_SETTING_CONNECTION_SETTING_NAME = "connection";
const QString NM_SETTING_CONNECTION_ID = "id";
const QString NM_SETTING_CONNECTION_UUID = "uuid";
QDBusConnection bus = QDBusConnection::systemBus();
QDBusInterface NetworkManager("org.freedesktop.NetworkManager", // service
"/org/freedesktop/NetworkManager/Settings", // path
"org.freedesktop.NetworkManager.Settings", // interface
bus);
if(!NetworkManager.isValid())
{
qDebug()<< "Failed to connect to the system bus" << NetworkManager.lastError() <<endl ;
return ;
}
QDBusReply<QList<QDBusObjectPath> > Connections = NetworkManager.call("ListConnections");
qDebug() << "reading saved networks..." << endl;
foreach (const QDBusObjectPath& connection, Connections.value())
{
qDebug() << "existing connections: " << connection.path() << endl;
QDBusInterface NetworkManagerSettings("org.freedesktop.NetworkManager",
connection.path(),
"org.freedesktop.NetworkManager.Settings.Connection",
QDBusConnection::systemBus());
QDBusMessage Settings = NetworkManagerSettings.call("GetSettings");
QVariant t = Settings.arguments().at(0);
qDebug()<< Settings << endl;
qDebug()<< "T :" << t.value<QDBusArgument>().currentType() << endl ; //is Qmap
qDebug()<< "VALUE :" << t.value<QMap <QString,QVariant>>() << endl ;
Connection settings;
QDBusReply<Connection > result2 = NetworkManagerSettings.call("GetSettings");
qDebug()<< "SETTINGS : " << result2.value().isEmpty() << endl;
}
终端返回:
2021-04-17 15:54:14 : existing connections: "/org/freedesktop/NetworkManager/Settings/9"
2021-04-17 15:54:14 : QDBusMessage(type=MethodReturn, service=":1.13", signature="a{sa{sv}}", contents=([Argument: a{sa{sv}} {"ipv6" = [Argument: a{sv} {"address-data" = [Variant: [Argument: aa{sv} {}]], "addresses" = [Variant: [Argument: a(ayuay) {}]], "dns" = [Variant: [Argument: aay {}]], "dns-search" = [Variant(QStringList): {}], "method" = [Variant(QString): "auto"], "route-data" = [Variant: [Argument: aa{sv} {}]], "routes" = [Variant: [Argument: a(ayuayu) {}]]}], "connection" = [Argument: a{sv} {"id" = [Variant(QString): "Auto SFR_7080"], "interface-name" = [Variant(QString): "wlp8s0"], "permissions" = [Variant(QStringList): {}], "timestamp" = [Variant(qulonglong): 1618667506], "type" = [Variant(QString): "802-11-wireless"], "uuid" = [Variant(QString): "a6a7d882-5483-49d9-84c0-d3de815d5bc7"]}], "proxy" = [Argument: a{sv} {}], "ipv4" = [Argument: a{sv} {"address-data" = [Variant: [Argument: aa{sv} {}]], "addresses" = [Variant: [Argument: aau {}]], "dns" = [Variant: [Argument: au {}]], "dns-search" = [Variant(QStringList): {}], "method" = [Variant(QString): "auto"], "route-data" = [Variant: [Argument: aa{sv} {}]], "routes" = [Variant: [Argument: aau {}]]}], "802-11-wireless-security" = [Argument: a{sv} {"auth-alg" = [Variant(QString): "open"], "key-mgmt" = [Variant(QString): "wpa-psk"]}], "802-11-wireless" = [Argument: a{sv} {"mac-address-blacklist" = [Variant(QStringList): {}], "mode" = [Variant(QString): "infrastructure"], "security" = [Variant(QString): "802-11-wireless-security"], "seen-bssids" = [Variant(QStringList): {"24:95:04:E0:70:84"}], "ssid" = [Variant(QByteArray): {83, 70, 82, 95, 55, 48, 56, 48}]}]}]) )
2021-04-17 15:54:14 : T : 4
2021-04-17 15:54:14 : VALUE : QMap()
2021-04-17 15:54:14 : SETTINGS : true
我不明白为什么我的 QMap 是空的?为什么它根本不包含任何东西?如何检索与ssid对应的id