it-swarm.com.de

Konfiguration des Network Managers über DBus: So stellen Sie den Ad-hoc-Modus ein

Ich habe eine harte Nuss zu knacken: eine schöne Flasche italienischen Chianti-Wein für den Löser! :)

Um WiFi automatisch zu konfigurieren, muss ich zuerst den Network Manager beenden und dann das WiFi über die Befehlszeile aktivieren: Ich mache das alles automatisch in meiner Anwendung und funktioniert großartig.

Dies ist jedoch nicht der richtige Weg. Da der Benutzer keine Netzwerk-GUI mehr hat, kann er einen anderen Netzwerkzugriff konfigurieren. Eine viel bessere und transparentere Möglichkeit wäre, WiFi direkt über den Network Manager über die DBus-Schnittstelle zu konfigurieren. Ich konnte es konfigurieren, aber nicht in den Ad-hoc-Modus versetzen.

Eine Weile im Web suchen: Viel über die Konfiguration im Allgemeinen, aber nichts im Zusammenhang mit dem Ad-hoc-Modus.

Ich denke, die einzige Möglichkeit, dies herauszufinden, besteht darin, in den Quellcode des Netzwerkmanagers zu schauen. Vielleicht hat es bereits jemand getan, und er kann antworten.

6
Andrea

Lesezeichen:
Konfiguration des Network Managers über DBus: So stellen Sie den Ad-hoc-Modus ein

Wenn Sie iwconfig verwenden, um "das WLAN über die Befehlszeile zu aktivieren", kann mode Ad-Hoc erstellt werden.

Zitat aus man iwconfig

Example :  
                   iwconfig eth0 mode Managed        <-- often wlan0 not the0
                   iwconfig eth0 mode Ad-Hoc                  Freudian ... eth0

Im Allgemeinen wird der Aufwand umso mühsamer, je niedriger und tiefer ein Level ist, was das gesamte Konzept und die Logik von Automatisierung und Computern zunichte macht.

Die "einfachste" Möglichkeit, DBus zu verwenden, ist jedoch möglicherweise die Verwendung der Benutzeroberfläche von D-Feet oder von qdbus, wie nachfolgend beschrieben hier . Beachten Sie, dass die Argumenttypen in der Befehlszeileneingabe eingeschränkt sind zu Methoden von qdbus und so wird möglicherweise der passende gdbus Befehl oder D-Feet benötigt.

Um die korrekten Argumentwerte für die erforderlichen Methoden zu erhalten, beobachten Sie den Einfluss von iwconfig wie oben oder eines funktionierenden GUI-Netzwerkmanagers mit:

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

während Sie den Modusparameter zwischen Ad-hoc und Infrastruktur ändern. Dies liefert die notwendigen Hinweise für die Konfiguration direkt auf dem DBus.
Somit,

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

listen

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

und

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'

gibt die drahtlosen Eigenschaften mit Modus in Fettdruck an:

 [Argument: a {sv} {"HwAddress" = [Variante (QString): "74: F0: 6D: 4B: 8E: 9B"], 
 "PermHwAddress" = [Variante ( QString): "74: F0: 6D: 4B: 8E: 9B"], 
"Mode" = [Variant (uint): 2],
 "Bitrate" = [Variant (uint): 28900], 
 "ActiveAccessPoint" = [Variant: [ObjectPath: /org/freedesktop/NetworkManager/AccessPoint/1395 weibl. ,
 "WirelessCapabilities" = [Variant (uint): 127]}] 

Die entsprechenden Methoden in fett von

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

sind

 Methode QString org.freedesktop.DBus.Introspectable.Introspect () 
 Methode QVariantMap org.freedesktop.DBus.Properties.GetAll (QString-Schnittstelle) 
 Methode QDBusVariant org.freedesktop.DBus .Properties.Get (QString-Schnittstelle, QString-Eigenschaftsname) 
methode void org.freedesktop.DBus.Properties.Set (QString-Schnittstelle, QString-Eigenschaftsname, QDBusVariant-Wert)methode QDBusObjectPath org.freedesktop.NetworkManager.ActivateConnection (QDBusObjectPath-Verbindung, QDBusObjectPath-Gerät, QDBusObjectPath specific_object)methode QDBusObjectPath org.freedesktop.NetworkManager.AddAndActivateConnection (QDBusRawType :: eine {sa {sv}} -Verbindung, QDBusObjectPath-Gerät, QDBusObjectPath specific_object, QDBusObjectPath & active_connection)
 Methode void org.freedesktop.NetworkManager.DeactivateConnection (QDBusObjectPath active_connection) 
methode void org.freedesktop.NetworkManager.Enable (bool enable)
 Methode QDBusObjectPath org.freedesktop.NetworkManager.GetDeviceByIpIface (QString iface) 
 Methode QList org.freedesktop.NetworkManager.GetDevices () 
 Methode QDBusRawType :: a {ss} org.freed .NetworkManager.GetPermissions () 
 Methode void org.freedesktop.NetworkManager.SetLogging (QString-Ebene, QString-Domänen) 
 Methode void org.freedesktop.NetworkManager.Sleep (bool sleep) 
 Methode uint org.freedesktop.NetworkManager.state () 
 Eigenschaft read bool org.freedesktop.NetworkManager.NetworkingEnabled 
 Eigenschaft readwrite bool org.freedesktop.NetworkManager.WimaxEnabled 
 Eigenschaft read bool org .freedesktop.NetworkManager.WimaxHardwareEnabled 
 Eigenschaft readwrite bool org.freedesktop.NetworkManager.WirelessEnabled 
 Eigenschaft read bool org.freedesktop.NetworkManager.WirelessHardwareEnabled 
 Eigenschaft readwrite bool org.freedes Die Eigenschaft WwanEnabled 
 Liest bool org.freedesktop.Net Die Eigenschaft workManager.WwanHardwareEnabled 
 liest die QList org.freedesktop.NetworkManager.ActiveConnections 
 liest die QString org.freedesktop.NetworkManager.Version 
 liest die Eigenschaft uint org.freedesktop.NetworkManager.State 
 Signal ungültig org.freedesktop.NetworkManager.CheckPermissions () 
 Signal ungültig org.freedesktop.NetworkManager.DeviceAdded (QDBusObjectPath) 
 Signal ungültig org.freedesktop.NetworkManager.DeviceRemoved (QDBusObjectPath) 
 Signal nichtig org.freedesktop.NetworkManager.PropertiesChanged (QVariantMap) 
 Signal nichtig org.freedesktop.NetworkManager.StateChanged (uint) 

und von

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

sind

 Methode QString org.freedesktop.DBus.Introspectable.Introspect () 
methode QVariantMap org.freedesktop.DBus.Properties.GetAll (QString-Schnittstelle)
 Methode QDBusVariant org.freedesktop.DBus.Properties.Get (QString-Schnittstelle, QString-Eigenschaftsname) 
methode void org.freedesktop.DBus.Properties.Set (QString-Schnittstelle, QString-Eigenschaftsname, QDBusVariant-Wert)
 Methode void org.freedesktop.NetworkManager.Device.Disconnect () 
methode QList <QDBusObjectPath> org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints ()Die Eigenschaft 
 liest bool org.freedesktop.NetworkManager.Device.FirmwareMissing. Die Eigenschaft 
 liest bool org.freedesktop.NetworkManager.Device.Managed. Die Eigenschaft 
 liest QDBusObjectPath org.freedesktop.NetworkManager.Device. ActiveConnection 
 Eigenschaft gelesen QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp4Config 
 Eigenschaft gelesen QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp6Config 
 Eigenschaft gelesen QDBusObjectPath Die Eigenschaft .Ip4Config 
 Hat die Eigenschaft QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip6Config 
 Gelesen. QDBusRawType: :( uu) org.freedesktop.NetworkManager.Device.StateReason 
 Hat die Eigenschaft QString gelesen Die Eigenschaft .freedesktop.NetworkManager.Device.Driver 
 liest die Eigenschaft QString org.freedesktop.NetworkManager.Device.Interface 
 liest die Eigenschaft QString org.freedesktop.NetworkManager.Device.IpInterface 
 liest die Eigenschaft QString org.frei Die Eigenschaft desktop.NetworkManager.Device.Udi 
 liest die Funktion uint org.freedesktop.NetworkManager.Device.Capabilities 
 liest die Funktion uint org.freedesktop.NetworkManager.Device.DeviceType 
 liest die Funktion uint org Die Eigenschaft .freedesktop.NetworkManager.Device.Ip4Address 
 liest die Eigenschaft uint org.freedesktop.NetworkManager.Device.State 
 liest die Eigenschaft QDBusObjectPath org.freedesktop.NetworkManager.Device.Wireless.ActiveAccessPoint 
 Lesen Sie die Eigenschaft QString org.freedesktop.NetworkManager.Device.Wireless.HwAddress 
 Lesen Sie die Eigenschaft QString org.freedesktop.NetworkManager.Device.Wireless.PermHwAddress 
 Lesen Sie die Eigenschaft uint org.freedesktop.NetworkManager.Device.Wireless. Bitrate 
eigenschaft read uint org.freedesktop.NetworkManager.Device.Wireless.ModeDie Eigenschaft 
 liest uint org.freedesktop.NetworkManager.Device.Wireless.WirelessCapabilities 
 Signal ungültig org.freedesktop.NetworkManager.Device.StateChanged (uint, uint, uint) 
 Signal ungültig org .freedesktop.NetworkManager.Device.Wireless.AccessPointAdded (QDBusObjectPath) 
 Signal ungültig org.freedesktop.NetworkManager.Device.Wireless.AccessPointRemoved (QDBusObjectPath) 
 Signal ungültig org.freedesktop.NetworkWirager .PropertiesChanged (QVariantMap) 
7
george rowell

Ich musste das erst kürzlich tun. Hier ist ein C-Code (abhängig von libdbus-1) zum Einrichten und Verbinden eines Ad-hoc-Netzwerks:

2
andy