#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() {
...