通过 DBus 配置网络管理器:如何设置 ad hoc 模式

And*_*rea 6 configuration network-manager wireless dbus adhoc

我有一个难以破解的难题:给求解器的一瓶漂亮的意大利基安蒂葡萄酒!:)

要自动配置 WiFi,我首先必须关闭网络管理器,然后通过命令行激活 WiFi:我在我的应用程序中自动完成了这一切,并且效果很好。

但是,这不是执行此操作的正确方法。由于用户不再有网络 GUI 来配置一些其他网络访问。一种更好和透明的方法是通过 DBus 接口上的网络管理器直接配置 WiFi。我能够对其进行配置,但无法将其设置为临时模式。

在网上搜索了一段时间:很多关于一般配置的信息,但与 ad hoc 模式无关。

我认为解决这个问题的唯一方法是查看网络管理器的源代码......也许有人已经这样做了,他可以回答。

geo*_*ell 7

书签:
通过 DBus 配置网络管理器:如何设置 ad hoc 模式

如果使用iwconfig“通过命令行激活 wifi”,那么它可以使mode Ad-Hoc.

引用自 man iwconfig

Example :  
                   iwconfig eth0 mode Managed        <-- often wlan0 not the0
                   iwconfig eth0 mode Ad-Hoc                  Freudian ... eth0
Run Code Online (Sandbox Code Playgroud)

一般来说,越是低级越深,人工劳动强度越大,这违背了自动化和计算机的整个概念和基本原理。

然而,要使用的DBus的“最简单”的方式可能是与D-Feet的GUI或qdbus如所描述的此处和下文..注意,参数类型在命令行输入限于方法中使用qdbus,因此匹配gdbus命令或D-Feet也许需要的。

要获得所需方法的正确参数值,请观察iwconfig,如上,或工作的 GUI 网络管理器的影响:

dbus-monitor --system "interface='org.freedesktop.NetworkManager'"
Run Code Online (Sandbox Code Playgroud)

同时更改 Ad Hoc 和 Infrastructure 之间的模式参数。这将为直接在 DBus 上进行配置提供必要的线索。
因此,

qdbus --system --literal  org.freedesktop.NetworkManager
Run Code Online (Sandbox Code Playgroud)

列表

/
/org
/org/freedesktop
/org/freedesktop/NetworkManager
/org/freedesktop/NetworkManager/AccessPoint
/org/freedesktop/NetworkManager/AccessPoint/1385
...
/org/freedesktop/NetworkManager/ActiveConnection
/org/freedesktop/NetworkManager/ActiveConnection/58
/org/freedesktop/NetworkManager/AgentManager
/org/freedesktop/NetworkManager/DHCP4Config
/org/freedesktop/NetworkManager/DHCP4Config/45
/org/freedesktop/NetworkManager/Devices
/org/freedesktop/NetworkManager/Devices/0
/org/freedesktop/NetworkManager/Devices/1        <- my wireless device 
/org/freedesktop/NetworkManager/IP4Config
/org/freedesktop/NetworkManager/IP4Config/44
/org/freedesktop/NetworkManager/Settings
/org/freedesktop/NetworkManager/Settings/0
/org/freedesktop/NetworkManager/Settings/1
...
/org/freedesktop/NetworkManager/Settings/5
/org/freedesktop/NetworkManager/Settings/6
Run Code Online (Sandbox Code Playgroud)

qdbus --system --literal  org.freedesktop.NetworkManager                 \
                         /org/freedesktop/NetworkManager/Devices/1       \
                          org.freedesktop.DBus.Properties.GetAll         \
                          org.freedesktop.NetworkManager.Device.Wireless \
| sed -e 's/, "/,\n"/g'
Run Code Online (Sandbox Code Playgroud)

粗体给出模式的无线属性:

[参数:a{sv} {"HwAddress" = [Variant(QString): "74:F0:6D:4B:8E:9B"],
"PermHwAddress" = [Variant(QString): "74:F0:6D:4B:8E:9B"],
"模式" = [变体(uint): 2],
“比特率”= [变体(uint):28900],
"ActiveAccessPoint" = [变体: [ObjectPath: /org/freedesktop/NetworkManager/AccessPoint/1395]],
"WirelessCapabilities" = [Variant(uint): 127]}]

相关方法大胆

qdbus --system --literal org.freedesktop.NetworkManager /org/freedesktop/NetworkManager
Run Code Online (Sandbox Code Playgroud)

方法 QString org.freedesktop.DBus.Introspectable.Introspect()
方法 QVariantMap org.freedesktop.DBus.Properties.GetAll(QString 接口)
方法 QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface, QString propname)
method void org.freedesktop.DBus.Properties.Set(QString interface, QString propname, QDBusVariant value) 
method QDBusObjectPath org.freedesktop.NetworkManager.ActivateConnection(QDBusObjectPath connection, QDBusObjectPath device, QDBusObjectPath specific_object) 
method QDBusObjectPath org.freedeskAddActivateConnection( NetworkManager.) QDBusRawType::a{sa{sv}} 连接、QDBusObjectPath 设备、QDBusObjectPath specific_object、QDBusObjectPath&active_connection)
方法无效 org.freedesktop.NetworkManager.DeactivateConnection(QDBusObjectPath active_connection)
方法 void org.freedesktop.NetworkManager.Enable(bool enable)
方法 QDBusObjectPath org.freedesktop.NetworkManager.GetDeviceByIpIface(QString iface)
方法 QList org.freedesktop.NetworkManager.GetDevices()
方法 QDBusRawType::a{ss} org.freedesktop.NetworkManager.GetPermissions()
方法 void org.freedesktop.NetworkManager.SetLogging(QString 级别,QString 域)
方法无效 org.freedesktop.NetworkManager.Sleep(bool sleep)
方法 uint org.freedesktop.NetworkManager.state()
属性读取 bool org.freedesktop.NetworkManager.NetworkingEnabled
属性 readwrite bool org.freedesktop.NetworkManager.WimaxEnabled
属性读取 bool org.freedesktop.NetworkManager.WimaxHardwareEnabled
属性 readwrite bool org.freedesktop.NetworkManager.WirelessEnabled
属性读取 bool org.freedesktop.NetworkManager.WirelessHardwareEnabled
属性 readwrite bool org.freedesktop.NetworkManager.WwanEnabled
属性读取 bool org.freedesktop.NetworkManager.WwanHardwareEnabled
属性读取 QList org.freedesktop.NetworkManager.ActiveConnections
属性读取 QString org.freedesktop.NetworkManager.Version
属性读取 uint org.freedesktop.NetworkManager.State
信号无效 org.freedesktop.NetworkManager.CheckPermissions()
信号无效 org.freedesktop.NetworkManager.DeviceAdded(QDBusObjectPath)
信号无效 org.freedesktop.NetworkManager.DeviceRemoved(QDBusObjectPath)
信号无效 org.freedesktop.NetworkManager.PropertiesChanged(QVariantMap)
信号无效 org.freedesktop.NetworkManager.StateChanged(uint)

qdbus --system --literal org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Devices/1
Run Code Online (Sandbox Code Playgroud)

方法 QString org.freedesktop.DBus.Introspectable.Introspect()
方法 QVariantMap org.freedesktop.DBus.Properties.GetAll(QString 接口)
方法 QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface, QString propname)
方法 void org.freedesktop.DBus.Properties.Set(QString interface, QString propname, QDBusVariant value)
方法无效 org.freedesktop.NetworkManager.Device.Disconnect()
方法 QList<QDBusObjectPath> org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints()
属性读取 bool org.freedesktop.NetworkManager.Device.FirmwareMissing
属性读取 bool org.freedesktop.NetworkManager.Device.Managed
属性读取 QDBusObjectPath org.freedesktop.NetworkManager.Device.ActiveConnection
属性读取 QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp4Config
属性读取 QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp6Config
属性读取 QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip4Config
属性读取 QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip6Config
属性读取 QDBusRawType::(uu) org.freedesktop.NetworkManager.Device.StateReason
属性读取 QString org.freedesktop.NetworkManager.Device.Driver
属性读取 QString org.freedesktop.NetworkManager.Device.Interface
属性读取 QString org.freedesktop.NetworkManager.Device.IpInterface
属性读取 QString org.freedesktop.NetworkManager.Device.Udi
属性读取 uint org.freedesktop.NetworkManager.Device.Capabilities
属性读取 uint org.freedesktop.NetworkManager.Device.DeviceType
属性读取 uint org.freedesktop.NetworkManager.Device.Ip4Address
属性读取 uint org.freedesktop.NetworkManager.Device.State
属性读取 QDBusObjectPath org.freedesktop.NetworkManager.Device.Wireless.ActiveAccessPoint
属性读取 QString org.freedesktop.NetworkManager.Device.Wireless.HwAddress
属性读取 QString org.freedesktop.NetworkManager.Device.Wireless.PermHwAddress
属性读取 uint org.freedesktop.NetworkManager.Device.Wireless.Bitrate
属性读取 uint org.freedesktop.NetworkManager.Device.Wireless.Mode
属性读取 uint org.freedesktop.NetworkManager.Device.Wireless.WirelessCapabilities
信号无效 org.freedesktop.NetworkManager.Device.StateChanged(uint, uint, uint)
信号无效 org.freedesktop.NetworkManager.Device.Wireless.AccessPointAdded(QDBusObjectPath)
信号无效 org.freedesktop.NetworkManager.Device.Wireless.AccessPointRemoved(QDBusObjectPath)
信号无效 org.freedesktop.NetworkManager.Device.Wireless.PropertiesChanged(QVariantMap)