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

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

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

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

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

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

2 ответа

Закладка:
Настройка сетевого администратора через 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 GUI или qdbus как описано здесь и используется ниже. Обратите внимание, что типы аргументов в командной строке ограничены методами qdbus и так соответствие gdbus команда или D-Feet может быть нужно

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

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

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

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

[Аргумент: a{sv} {"HwAddress" = [Вариант (QString): "74:F0:6D:4B:8E:9B"],
"PermHwAddress" = [вариант (QString): "74: F0: 6D: 4B: 8E: 9B"],
"Mode" = [вариант (uint): 2],
"Битрейт" = [вариант (uint): 28900],
"ActiveAccessPoint" = [вариант: [ObjectPath: /org/freedesktop/NetworkManager/AccessPoint/1395]],
"WirelessCapabilities" = [вариант (uint): 127]}]

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

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

являются

метод QString         org.freedesktop.DBus.Introspectable.Introspect() метод QVariantMap     org.freedesktop.DBus.Properties.GetAll(интерфейс QString) метод QDBusVariant    org.freedesktop.DBus.Properties.Get(интерфейс QString, метод QString org) .freedesktop.DBus.Properties.Set(QString интерфейс, QString PROPNAME, значение QDBusVariant) метод QDBusObjectPath org.freedesktop.NetworkManager.ActivateConnection (QDBusObjectPath соединение, QDBusObjectPath устройство, QDBusObjectPath specific_object) метод QDBusObjectPath org.freedesktop.NetworkManager.AddAndActivateConnection(QDBusRawType:: Соединение {sa{sv}}, устройство QDBusObjectPath, метод QDBusObjectPath specific_object, метод QDBusObjectPath& active_connection) void            org.freedesktop.NetworkManager.DeactivateConnection(метод QDBusObjectPath active_connection.MB).GetDeviceByIpIface(QString iface) метод QList org.freedesktop.NetworkManager.G Метод etDevices() QDBusRawType::a{ss} org.freedesktop.NetworkManager.GetPermissions() void            org.freedesktop.NetworkManager.SetLogging(уровень QString, домены QString) метод void            org.freedesktop.NetworkManager.Sleep(метод) uint            org.freedesktop.NetworkManager.state() для чтения bool org.freedesktop.NetworkManager.NetworkingEnabled свойство readwrite bool org.freedesktop.NetworkManager.WimaxEnabled для чтения bool org.freedesktop.NetworkManager.WabledanWareWareWareWareWareWareWareWareWareWareWareWard чтение свойства bool org.freedesktop.NetworkManager.WirelessHardwareEnabled свойство readwrite bool свойство read uint org.freedesktop.NetworkManager.State сигнал void org.freedesktop.NetworkManag сигнал er.CheckPermissions() void org.freedesktop.NetworkManager.DeviceAdded(QDBusObjectPath) (UINT) 

и из

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

являются

метод QString         org.freedesktop.DBus.Introspectable.Introspect() метод QVariantMap     org.freedesktop.DBus.Properties.GetAll(интерфейс QString) метод QDBusVariant    org.freedesktop.DBus.Properties.Get(интерфейс QString, метод QString org) . freedesktop.DBus.Properties.Set (интерфейс QString, имя свойства QString, значение QDBusVariant) void              org.freedesktop.NetworkManager.Device.Disconnect() метод QList  org.freedesktop.NetworkManager.Device.Wireless.Gest bool org.freedesktop.NetworkManager.Device..freedesktop.NetworkManager.Device.Dhcp6Config свойство read QDBusObjectPath org.freedesktop.NetworkManager.Device.Ip4Config свойство read QDBusObjectPath org.freedesk Свойство top.NetworkManager.Device.Ip6Config для чтения свойства QDBusRawType::(uu) org.freedesktop.NetworkManager.Device.StateReason, чтение свойства QString         org.freedesktop.NetworkManager.Device.Driver для чтения QString org.freedesktop.eviceInerager. QString         org.freedesktop.NetworkManager.Device.IpInterface считывает свойство QString         org.freedesktop.NetworkManager.Device.Udi читает свойство uint            org.freedesktop.NetworkManager.Device.Capabilities читает uint org.freedesktop.NetworkManager.Device.Device или метод uint.freedesktop.NetworkManager.Device.Ip4Address свойство read uint            org.freedesktop.NetworkManager.Device.State свойство read QDBusObjectPath org.freedesktop.NetworkManager.Device.Wireless.ActiveAccessPoint, свойство QString org.freedesanress.Network.New QString org.freedesktop.NetworkManager.Device.Wireless.PermHwAddress свойство read для uint org.freedesktop.NetworkManager.Device.Wireless.Bitrate свойство read uint org.freedesktop.NetworkManager.Device.Wireless.Mode свойство read uint org.freedesktop.NetworkManager.Device.Wireless.WirelessCapabilities void org.freedesktop.NetworkManager.Device.StateChanged(uint, uint, uint.fk) void.NetworkManager.Device.Wireless.AccessPointAdded (QDBusObjectPath) сигнал void org.freedesktop.NetworkManager.Device.Wireless.AccessPointRemoved (QDBusObjectPath) void org.freedesktop.NetworkManager.Device.WarihMedPro 

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

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