Дублирует Connman wifi connect Qt

#qt #wifi #dbus #connman

#qт #wi- Fi #dbus #коннман #qt #wi-Fi

Вопрос:

Я работаю над imx6 и пытаюсь подключиться к сети Wi-Fi через Dbus с помощью приложения Qt. Приложение правильно подключается к connman через Dbus, и я правильно получаю услуги Wi-Fi. Проблема в том, что когда я пытаюсь подключиться к сети wiif, я обнаруживаю эту ошибку :

«Метод «Connect» с подписью «ss» на интерфейсе «net.connman.Сервис» не существует

Код, который я использую в приложении Qt для подключения к сети Wi-Fi, является:

 QDBusInterface *iface =
new QDBusInterface("net.connman","/net/connman/technology/wifi","net.connman.Service",QDBusConnection::systemBus());

if (!iface->isValid())
{
    qDebug() << Q_FUNC_INFO << "Fail to connect to the Connman Technology interface: " << QDBusConnection::systemBus().lastError().message();
}



QDBusReply<void> reply = iface->call("Connect","/net/connman/service/wifi_88da1a4db14c_41684179_managed_psk","password");

if (!reply.isValid())
{
    qDebug() << "Call connect result: " << reply.error().message();
}
  

Когда я пытаюсь подключиться к сети Wi-Fi с помощью команд оболочки, используя connmanctl, это работает как шарм.

Ответ №1:

У меня была такая же проблема на imx6. Решение, которое работает для меня, — это создание файла конфигурации для сети перед вызовом метода Connect.

Файл должен находиться в /var/lib/connman и иметь имя [SSID].config . Содержимое файла:

 [service_wifi_PUT_SERVICE_NAME]
Name = PUT_SSID
Type = wifi
Passphrase = PUT_PASSWORD
  

И попробуйте подключиться таким образом:

 QDBusInterface *iface =  new QDBusInterface("net.connman", QString{"/net/connman/service/%1"}.arg(SERVICE_NAME), "net.connman.Service", QDBusConnection::systemBus());
QDBusReply<void> reply = iface->call("Connect");
if(!reply.isValid() {
...