6 votes

Configuration du gestionnaire réseau via DBus : comment définir le mode ad hoc

J'ai un casse-tête difficile à résoudre : une belle bouteille de vin italien Chianti pour le résolveur! :)

Pour configurer automatiquement le WiFi, je dois d'abord arrêter le Gestionnaire de réseau puis activer le WiFi via la ligne de commande : je fais tout cela automatiquement dans mon application et ça fonctionne très bien.

Cependant, ce n'est pas la bonne manière de le faire. Comme l'utilisateur n'a plus d'interface réseau GUI pour configurer un autre accès réseau. Une bien meilleure et plus transparente serait de configurer le WiFi directement via Network Manager via l'interface DBus. J'ai réussi à le configurer, mais je n'ai pas pu le mettre en mode ad hoc.

Après avoir cherché sur le web pendant un certain temps : beaucoup de choses sur la configuration en général mais rien lié au mode ad hoc.

Je pense que la seule manière de le découvrir est d'examiner le code source du Gestionnaire de réseau...peut-être que quelqu'un l'a déjà fait et peut répondre.

7voto

george rowell Points 890

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" alors il peut faire le mode Ad-Hoc .

Citation de man iwconfig

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

En général, plus on va à bas niveau et en profondeur, plus l'effort est manuel, ce qui va à l'encontre du concept et de la raison d'être de l'automatisation et des ordinateurs.

Cependant, pour utiliser le DBus, la méthode la plus "simple" pourrait être la suivante D-Feet ou qdbus comme décrit aquí et utilisé ci-dessous . Notez que les types d'arguments sont limités dans l'entrée de la ligne de commande aux méthodes de qdbus et donc la correspondance gdbus ou D-Feet peut-être nécessaire.

Pour obtenir les valeurs correctes des arguments pour les méthodes requises, observez l'influence de iwconfig comme ci-dessus, ou un gestionnaire de réseau GUI fonctionnel avec :

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

tout en changeant le paramètre du 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

y

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 mode sur en gras :

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

Les éléments pertinents méthodes sur en gras de

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

son

method QString         org.freedesktop.DBus.Introspectable.Introspect()
method QVariantMap     org.freedesktop.DBus.Properties.GetAll(QString interface)
method 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.freedesktop.NetworkManager.AddAndActivateConnection(QDBusRawType::a{sa{sv}} connection, QDBusObjectPath device, QDBusObjectPath specific\_object, QDBusObjectPath& active\_connection)**
method void            org.freedesktop.NetworkManager.DeactivateConnection(QDBusObjectPath active\_connection)
**method void            org.freedesktop.NetworkManager.Enable(bool enable)**
method QDBusObjectPath org.freedesktop.NetworkManager.GetDeviceByIpIface(QString iface)
method QList org.freedesktop.NetworkManager.GetDevices()
method QDBusRawType::a{ss} org.freedesktop.NetworkManager.GetPermissions()
method void            org.freedesktop.NetworkManager.SetLogging(QString level, QString domains)
method void            org.freedesktop.NetworkManager.Sleep(bool sleep)
method uint            org.freedesktop.NetworkManager.state()
property read bool org.freedesktop.NetworkManager.NetworkingEnabled
property readwrite bool org.freedesktop.NetworkManager.WimaxEnabled
property read bool org.freedesktop.NetworkManager.WimaxHardwareEnabled
property readwrite bool org.freedesktop.NetworkManager.WirelessEnabled
property read bool org.freedesktop.NetworkManager.WirelessHardwareEnabled
property readwrite bool org.freedesktop.NetworkManager.WwanEnabled
property read bool org.freedesktop.NetworkManager.WwanHardwareEnabled
property read QList org.freedesktop.NetworkManager.ActiveConnections
property read QString org.freedesktop.NetworkManager.Version
property read 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

son

method QString           org.freedesktop.DBus.Introspectable.Introspect()
**method QVariantMap       org.freedesktop.DBus.Properties.GetAll(QString interface)**
method QDBusVariant      org.freedesktop.DBus.Properties.Get(QString interface, QString propname)
**method void              org.freedesktop.DBus.Properties.Set(QString interface, QString propname, QDBusVariant value)**
method void              org.freedesktop.NetworkManager.Device.Disconnect()
**method QList<QDBusObjectPath> org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints()**
property read bool            org.freedesktop.NetworkManager.Device.FirmwareMissing
property read bool            org.freedesktop.NetworkManager.Device.Managed
property read QDBusObjectPath org.freedesktop.NetworkManager.Device.ActiveConnection
property read QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp4Config
property read QDBusObjectPath org.freedesktop.NetworkManager.Device.Dhcp6Config
property read QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip4Config
property read QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip6Config
property read QDBusRawType::(uu) org.freedesktop.NetworkManager.Device.StateReason
property read QString         org.freedesktop.NetworkManager.Device.Driver
property read QString         org.freedesktop.NetworkManager.Device.Interface
property read QString         org.freedesktop.NetworkManager.Device.IpInterface
property read QString         org.freedesktop.NetworkManager.Device.Udi
property read uint            org.freedesktop.NetworkManager.Device.Capabilities
property read uint            org.freedesktop.NetworkManager.Device.DeviceType
property read uint            org.freedesktop.NetworkManager.Device.Ip4Address
property read uint            org.freedesktop.NetworkManager.Device.State
property read QDBusObjectPath org.freedesktop.NetworkManager.Device.Wireless.ActiveAccessPoint
property read QString         org.freedesktop.NetworkManager.Device.Wireless.HwAddress
property read QString         org.freedesktop.NetworkManager.Device.Wireless.PermHwAddress
property read uint            org.freedesktop.NetworkManager.Device.Wireless.Bitrate
**property read uint            org.freedesktop.NetworkManager.Device.Wireless.Mode**
property read 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 void org.freedesktop.NetworkManager.Device.Wireless.PropertiesChanged(QVariantMap)

2voto

andy Points 21

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X