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

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

我有一件难事要解决:给解答者一瓶上好的意大利基安蒂葡萄酒!:)

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

但是,这不是正确的做法。因为用户不再有网络 GUI 来配置其他网络访问。一种更好、更透明的方法是直接通过 DBus 接口上的网络管理器配置 WiFi。我可以配置它,但无法将其设置为 ad hoc 模式。

在网上搜索了一段时间:有很多关于一般配置的信息,但没有与临时模式相关的信息。

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

答案1

书签:
通过 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

一般来说,水平越低、深度越深,需要的人力就越密集,从而违背了自动化和计算机的整个概念和原理。

然而,使用 DBus 最“简单”的方法可能是使用D-FeetGUI 或qdbus如上所述这里并在下面使用..请注意,命令行输入的参数类型仅限于方法qdbus,因此匹配的gdbus命令或D-Feet可能需要。

iwconfig要获取所需方法的正确参数值,请观察上述内容的影响,或使用以下方法观察正在运行的 GUI 网络管理器:

dbus-monitor --system "interface='org.freedesktop.NetworkManager'"

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

qdbus --system --literal  org.freedesktop.NetworkManager

列表

/
/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

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'

提供无线属性模式大胆的

[参数: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" = [变量 (uint): 127]}]

相关方法大胆的

qdbus --system --literal org.freedesktop.NetworkManager /org/freedesktop/NetworkManager

方法 QString org.freedesktop.DBus.Introspectable.Introspect()
方法 QVariantMap org.freedesktop.DBus.Properties.GetAll(QString 接口)
方法 QDBusVariant org.freedesktop.DBus.Properties.Get(QString 接口,QString propname)
方法 void org.freedesktop.DBus.Properties.Set(QString 接口,QString propname,QDBusVariant 值)
方法 QDBusObjectPath org.freedesktop.NetworkManager.ActivateConnection(QDBusObjectPath 连接,QDBusObjectPath 设备,QDBusObjectPath specific_object)
方法 QDBusObjectPath org.freedesktop.NetworkManager.AddAndActivateConnection(QDBusRawType::a{sa{sv}} 连接,QDBusObjectPath 设备,QDBusObjectPath specific_object,QDBusObjectPath& active_connection)
方法 void 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 level, QString domains)
方法 void org.freedesktop.NetworkManager.Sleep(bool sleep)
方法 uint org.freedesktop.NetworkManager.state()
属性读取 bool org.freedesktop.NetworkManager.NetworkingEnabled
属性读写 bool org.freedesktop.NetworkManager.WimaxEnabled
属性读取 bool org.freedesktop.NetworkManager.WimaxHardwareEnabled
属性读写 bool org.freedesktop.NetworkManager.WirelessEnabled
属性读取 bool org.freedesktop.NetworkManager.WirelessHardwareEnabled
属性读写 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
信号void org.freedesktop.NetworkManager.CheckPermissions()
信号void org.freedesktop.NetworkManager.DeviceAdded(QDBusObjectPath)
信号void org.freedesktop.NetworkManager.DeviceRemoved(QDBusObjectPath)
信号void org.freedesktop.NetworkManager.PropertiesChanged(QVariantMap)
信号void org.freedesktop.NetworkManager.StateChanged(uint)

qdbus --system --literal org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Devices/1

方法 QString org.freedesktop.DBus.Introspectable.Introspect()
方法 QVariantMap org.freedesktop.DBus.Properties.GetAll(QString 接口)
方法 QDBusVariant org.freedesktop.DBus.Properties.Get(QString 接口,QString propname)
方法 void org.freedesktop.DBus.Properties.Set(QString 接口,QString propname,QDBusVariant 值)
方法 void 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
信号void org.freedesktop.NetworkManager.Device.StateChanged(uint, uint, uint)
信号void org.freedesktop.NetworkManager.Device.Wireless.AccessPointAdded(QDBusObjectPath)
信号void org.freedesktop.NetworkManager.Device.Wireless.AccessPointRemoved(QDBusObjectPath)
信号void org.freedesktop.NetworkManager.Device.Wireless.PropertiesChanged(QVariantMap)

答案2

我最近才刚刚开始做这件事。以下是一些 C 代码(仅依赖于libdbus-1)用于设置和连接临时网络:

相关内容