From 27e0071a7dabdc207ca2760b23b21ebd662bfe0f Mon Sep 17 00:00:00 2001 From: zhangjiaping Date: Wed, 26 May 2021 16:54:20 +0800 Subject: [PATCH] fix(wifi): WPA3 can not be connected successfully. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Description: 修复WPA3网络连接失败的问题 Log: 修复WPA3网络连接失败的问题 --- src/backthread.cpp | 14 ++++++++++---- src/backthread.h | 2 +- src/oneconnform.cpp | 6 +++--- src/oneconnform.h | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/backthread.cpp b/src/backthread.cpp index a418242a..b6a3e1f7 100644 --- a/src/backthread.cpp +++ b/src/backthread.cpp @@ -281,18 +281,24 @@ void BackThread::dellConnectLanResult(QString info) } //to connected wireless network need a password -void BackThread::execConnWifiPWD(QString connName, QString password, QString connType) +void BackThread::execConnWifiPWD(QString connName, QString password, QString connType, QString security) { //disConnLanOrWifi("wifi"); - if (!connType.isEmpty()) { QString strConntype = "nmcli connection modify '" + connName + "' wifi-sec.psk-flags 0"; Utils::m_system(strConntype.toUtf8().data()); } QString tmpPath = "/tmp/kylin-nm-btoutput-" + QDir::home().dirName(); - QString cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli device wifi connect '" + connName + "' password '" + password + "' > " + tmpPath; - Utils::m_system(cmdStr.toUtf8().data()); + if (security.contains("WPA3")) { + QString create_cmd = QString("nmcli connection add con-name %1 type wifi 802-11-wireless-security.key-mgmt sae ssid %2 802-11-wireless-security.psk %3").arg(connName).arg(connName).arg(password); + Utils::m_system(create_cmd.toUtf8().data()); + QString connect_cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli connection up '" + connName + "' > " + tmpPath; + Utils::m_system(connect_cmdStr.toUtf8().data()); + } else { + QString cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli device wifi connect '" + connName + "' password '" + password + "' > " + tmpPath; + Utils::m_system(cmdStr.toUtf8().data()); + } QFile file(tmpPath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { diff --git a/src/backthread.h b/src/backthread.h index 172c84a8..b86c6573 100644 --- a/src/backthread.h +++ b/src/backthread.h @@ -61,7 +61,7 @@ public slots: void execConnLan(QString connName, QString ifname, QString connectType); void execConnWifi(QString connName, QString connIfName); void execReconnWIfi(QString uuid); - void execConnWifiPWD(QString connName, QString password, QString connType); + void execConnWifiPWD(QString connName, QString password, QString connType, QString security); void execConnWifiPsk(QString cmd); void execConnHiddenWifiWPA(QString connName, QString password); void execConnRememberedHiddenWifi(QString connName); diff --git a/src/oneconnform.cpp b/src/oneconnform.cpp index 808044a0..4687b65d 100644 --- a/src/oneconnform.cpp +++ b/src/oneconnform.cpp @@ -554,7 +554,7 @@ void OneConnForm::slotConnWifi() void OneConnForm::slotConnWifiPWD() { this->startWifiWaiting(true); - emit sigConnWifiPWD(wifiName, ui->lePassword->text(), connType); + emit sigConnWifiPWD(wifiName, ui->lePassword->text(), connType, wifiSecu); } //点击后断开wifi网络 @@ -814,8 +814,8 @@ void OneConnForm::on_btnConnPWD_clicked() bt->moveToThread(t); connect(t, SIGNAL(finished()), t, SLOT(deleteLater())); connect(t, SIGNAL(started()), this, SLOT(slotConnWifiPWD())); - connect(this, SIGNAL(sigConnWifiPWD(QString, QString, QString)), - bt, SLOT(execConnWifiPWD(QString, QString, QString))); + connect(this, SIGNAL(sigConnWifiPWD(QString, QString, QString, QString)), + bt, SLOT(execConnWifiPWD(QString, QString, QString, QString))); connect(bt, SIGNAL(connDone(int)), mw, SLOT(connWifiDone(int))); connect(bt, SIGNAL(connDone(int)), this, SLOT(slotConnWifiResult(int))); connect(bt, SIGNAL(btFinish()), t, SLOT(quit())); diff --git a/src/oneconnform.h b/src/oneconnform.h index 1b9f8319..4abb18cb 100644 --- a/src/oneconnform.h +++ b/src/oneconnform.h @@ -164,7 +164,7 @@ signals: void requestRefreshWifiList(); void sigConnWifi(QString, QString); - void sigConnWifiPWD(QString, QString, QString); + void sigConnWifiPWD(QString, QString, QString, QString); void sigConnWifiPsk(QString); };