web-dev-qa-db-fra.com

Configuration du Network Manager via DBus: comment définir le mode ad hoc

J'ai un problème difficile à résoudre: une belle bouteille de vin italien Chianti au solveur! :)

Pour configurer automatiquement le WiFi, je dois d'abord tuer le gestionnaire de réseau et ensuite l'activer via la ligne de commande: je le fais automatiquement dans mon application et fonctionne très bien.

Cependant, ce n'est pas la bonne façon de faire cela. Comme l'utilisateur n'a plus d'interface graphique réseau pour configurer un autre accès réseau. Une méthode bien meilleure et transparente consisterait à configurer le WiFi directement via Network Manager via l’interface DBus. Je pouvais le configurer, mais je ne pouvais pas le configurer en mode ad hoc.

Recherche sur le Web pendant un moment: beaucoup de choses sur la configuration en général, mais rien n’est lié au mode ad hoc.

Je pense que la seule façon de le savoir est d'examiner le code source du gestionnaire de réseau ... peut-être que quelqu'un l'a déjà fait et qu'il peut répondre.

6
Andrea

Signet:
Configuration du Network Manager via DBus: comment définir le mode ad hoc

Si vous utilisez iwconfig pour "activer le wifi via la ligne de commande", le mode Ad-Hoc peut alors être créé.

Citant de man iwconfig

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

En règle générale, plus le niveau est bas et profond, plus l'effort demande beaucoup de travail manuel, ce qui va à l'encontre du concept et de la logique de l'automatisation et des ordinateurs.

Cependant, utiliser DBus de la manière la plus "simple" peut être avec l'interface graphique de D-Feet ou qdbus comme décrit ici et utilisé ci-dessous. Notez que les types d'arguments sont limités en entrée de ligne de commande aux méthodes de qdbus et donc la commande gdbus correspondante ou D-Feet peut être nécessaire.

Pour obtenir les valeurs d'argument correctes pour les méthodes requises, observez l'influence de iwconfig, comme ci-dessus, ou d'une interface utilisateur graphique Network Manager fonctionnant avec:

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

lors du changement de paramètre de mode entre Ad Hoc et Infrastructure. Cela fournira les indices nécessaires à la configuration directement sur le DBus.
Ainsi,

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

listes

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

et

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'

donne les propriétés sans fil avec le mode en gras :

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

Les méthodes pertinentes en en gras de

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

sont

 méthode QString org.freedesktop.DBus.Introspectable.Introspect () 
 méthode QVariantMap org.freedesktop.DBus.Properties.GetAll (interface QString) 
 méthode QDBusVariant org.freedesktop.DBus .Properties.Get (interface QString, propname QString) 
méthode void org.freedesktop.DBus.Properties.Set (interface QString, propname QString, valeur QDBusVariant)méthode QDBusObjectPath org.freedesktop.NetworkManager.ActivateConnection (connexion QDBusObjectPath, périphérique QDBusObjectPath, QDBusObjectPath Specific_object)méthode QDBusObjectPath org.freedesktop.NetworkManager.AddAndActivateConnection (QDBusRawType :: a {sa {sv}} connexion, périphérique QDBusObjectPath, QDBusObjectPath, objet_spécifique, QDBusObjectPath et connexion active)
 méthode void org.freedesktop.NetworkManager.DeactivateConnection (QDBusObjectPath active_connection) 
méthode void org.freedesktop.NetworkManager.Enable (bool enable)
 méthode QDBusObjectPath org.freedesktop.NetworkManager.GetDeviceByIpIface (QString iface) 
 méthode QList org. .NetworkManager.GetPermissions () 
 Méthode void org.freedesktop.NetworkManager.SetLogging (niveau QString, domaines QString) 
 Méthode void org.freedesktop.NetworkManager.Sleep (veille bool) 
 method uint org.freedesktop.NetworkManager.state () 
 propriété read bool org.freedesktop.NetworkManager.NetworkingEnabled 
 propriété readwrite bool org.freedesktop.NetworkManager.WimaxEnabled 
 propriété read bool org .freedesktop.NetworkManager.WimaxHardwareEnabled 
 propriété readwrite bool org.freedesktop.NetworkManager.WirelessEnabled 
 propriété read borite org.freedesktop.NetworkManager.WirelessHardwareEnabled 
 propriété readwrite bool org.freedesktop.NetworkManager. WwanEnabled 
 Propriété lire bool org.freedesktop.Net propriété workManager.WwanHardwareEnabled 
 lire QList org.freedesktop.NetworkManager.ActiveConnections 
 propriété lire QString org.freedesktop.NetworkManager.Version 
 propriété lire uint org.freedesktop.NetworkManager.State 
 signal void org.freedesktop.NetworkManager.CheckPermissions () 
 signal void org.freedesktop.NetworkManager.DeviceAdded (QDBusObjectPath) 
 signal void org.freedesktop.NetworkManager.DeviceRemoved (QDBusObjectPath). ____.] signal void org.freedesktop.NetworkManager.PropertiesChanged (QVariantMap) 
 signal void org.freedesktop.NetworkManager.StateChanged (uint) 

et de

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

sont

 méthode QString org.freedesktop.DBus.Introspectable.Introspect () 
méthode QVariantMap org.freedesktop.DBus.Properties.GetAll (interface QString)
 méthode QDBusVariant org.freedesktop.DBus.Properties.Get (interface QString, nomprom QString) 
méthode void org.freedesktop.DBus.Properties.Set (interface QString, propname QString, valeur QDBusVariant)
 méthode void org.freedesktop.NetworkManager.Device.Disconnect () 
méthode QList <QDBusObjectPath> org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints ()Propriété 
 read bool org.freedesktop.NetworkManager.Device.FirmwareMissing 
 propriété read bool org.freedesktop.NetworkManager.Device.Managed 
 propriété read QDBusObjectPath org.freedesktop.NetworkManager.Device. Propriété ActiveConnection 
 Lire QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp4Config 
 Propriété lire QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp6Config [. .Ip4Config 
 Propriété lire QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip6Config 
 Propriété lire QDBusRawType: :( uu) org.freedesktop.NetworkManager.Device.StateReason 
 Propriété .freedesktop.NetworkManager.Device.Driver 
 en lecture QString org.freedesktop.NetworkManager.Device.Interface 
 propriété en lecture QString org.freedesktop.NetworkManager.Device.IpInterface 
 en lecture QString org.free desktop.NetworkManager.Device.Udi 
 propriété en lecture uint org.freedesktop.NetworkManager.Device.Capabilities 
 propriété en lecture uint org.freedesktop.NetworkManager.Device.DeviceType 
 propriété en lecture uint org Propriété .freedesktop.NetworkManager.Device.Ip4Address 
 lire uint org.freedesktop.NetworkManager.Device.State 
 lire propriété QDBusObjectPath org.freedesktop.NetworkManager.Device.Wireless.ActiveAccessPoint 
 read QString org.freedesktop.NetworkManager.Device.Wireless.HwAddress 
 propriété read QString org.freedesktop.NetworkManager.Device.Wireless.PermHwAddress 
 propriété read uint org.freedesktop.NetworkManager.Device.Wireless. Débit binaire 
propriété lue uint org.freedesktop.NetworkManager.Device.Wireless.Mode
 propriété lu uint org.freedesktop.NetworkManager.Device.Wireless.WirelessCapabilities 
 signal void org.freedesktop.NetworkManager.Device.StateChanged (uint, uint, uint) 
 signal void org. .freedesktop.NetworkManager.Device.Wireless.AccessPointAdded (QDBusObjectPath) 
 signal void org.freedesktop.NetworkManager.Device.Wireless.AccessPointRemoved (QDBusObjectPath) 
 signal. .PropertiesChanged (QVariantMap) 
7
george rowell

Je viens de le faire récemment. Voici un code C (qui dépend uniquement de libdbus-1) pour configurer et connecter un réseau ad-hoc:

2
andy