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.
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)
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: