Настройка сетевого менеджера через DBus: как настроить режим ad hoc

У меня крепкий орешек: хорошая бутылка итальянского вина Кьянти для солвера! :)

Чтобы автоматически настроить WiFi, мне сначала нужно убить Network Manager, а затем активировать WiFi через командную строку: я делаю все это автоматически в своем приложении и прекрасно работает.

Однако, это не правильный способ сделать это. Поскольку у пользователя больше нет сетевого графического интерфейса для настройки какого-либо другого сетевого доступа. Гораздо лучший и прозрачный способ - настроить WiFi напрямую через Network Manager через интерфейс DBus. Мне удалось настроить его, но я не смог установить его в специальный режим.

Некоторый поиск в Интернете: много о конфигурации в целом, но ничего не относится к специальному режиму.

Я думаю, что единственный способ понять это - заглянуть в исходный код Network Manager ... может быть, кто-то уже сделал это, и он может ответить.

6
задан 6 October 2012 в 14:38

2 ответа

Я только недавно должен был сделать это. Вот некоторый код C (зависит только от libdbus-1) для настройки и подключения специальной сети:

0
ответ дан 6 October 2012 в 14:38

Закладка:
Конфигурация диспетчера сети через DBus: как настроить режим ad hoc

При использовании iwconfig для «активации Wi-Fi через Командная строка ", то это может сделать mode Ad-Hoc.

Цитата из man iwconfig

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

Как правило, чем ниже уровень и глубже, тем более трудоемким становится трудоемкое ручное усилие, разрушающее всю концепцию и обоснование автоматизации и компьютеров.

Однако, чтобы использовать DBus, «самый простой» способ может быть с графическим интерфейсом D-Feet или qdbus, как описано здесь и используется ниже. Обратите внимание, что типы аргументов ограничены при вводе командной строки к методам qdbus и, таким образом, может потребоваться соответствующая команда gdbus или D-Feet.

Чтобы получить правильные значения аргументов для требуемых методов, наблюдайте влияние iwconfig, как указано выше, или работающего менеджера сети GUI с:

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

при изменении параметра режима. между Ad Hoc и Инфраструктурой. Это обеспечит необходимые ключи для конфигурации непосредственно на 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'

дают беспроводные свойства с режимом в жирным шрифтом ]:

[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]}]

Соответствующие методы в выделены жирным шрифтом из

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

:

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)

и

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

-

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)
0
ответ дан 6 October 2012 в 14:38

Другие вопросы по тегам:

Похожие вопросы: