У меня крепкий орешек: хорошая бутылка итальянского вина Кьянти для солвера! :)
Чтобы автоматически настроить WiFi, мне сначала нужно убить Network Manager, а затем активировать WiFi через командную строку: я делаю все это автоматически в своем приложении и прекрасно работает.
Однако, это не правильный способ сделать это. Поскольку у пользователя больше нет сетевого графического интерфейса для настройки какого-либо другого сетевого доступа. Гораздо лучший и прозрачный способ - настроить WiFi напрямую через Network Manager через интерфейс DBus. Мне удалось настроить его, но я не смог установить его в специальный режим.
Некоторый поиск в Интернете: много о конфигурации в целом, но ничего не относится к специальному режиму.
Я думаю, что единственный способ понять это - заглянуть в исходный код Network Manager ... может быть, кто-то уже сделал это, и он может ответить.
Я только недавно должен был сделать это. Вот некоторый код C (зависит только от libdbus-1
) для настройки и подключения специальной сети:
Закладка:
Конфигурация диспетчера сети через 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)