From 0b9f4a39a5d807756e14dfc8c656db4fb2a9cf1c Mon Sep 17 00:00:00 2001 From: chenlelin Date: Fri, 16 Apr 2021 07:46:21 +0800 Subject: [PATCH] Fix bug connect wifi abnormal if there is a same name wired network --- src/backthread.cpp | 47 +++++++++++++++++-------------- src/backthread.h | 3 +- src/confform.cpp | 5 ++++ src/kylin-dbus-interface.cpp | 49 ++++++++++++++++++++++++++++++--- src/kylin-dbus-interface.h | 1 + src/mainwindow.cpp | 25 ++++++++--------- src/oneconnform.cpp | 7 +++-- src/oneconnform.h | 5 ++-- src/wpawifidialog.cpp | 5 ++++ translations/kylin-nm_zh_CN.qm | Bin 23019 -> 23172 bytes translations/kylin-nm_zh_CN.ts | 10 +++++++ 11 files changed, 112 insertions(+), 45 deletions(-) diff --git a/src/backthread.cpp b/src/backthread.cpp index 81ef6a74..93892192 100644 --- a/src/backthread.cpp +++ b/src/backthread.cpp @@ -170,13 +170,13 @@ void BackThread::execEnWifi() char *chr1 = "nmcli radio wifi on"; Utils::m_system(chr1); emit btFinish(); + KylinDBus objBackThreadDBus; while (1) { if (execGetIface()->wstate != 2) { - KylinDBus objKyDbus; while (1) { - if (objKyDbus.getAccessPointsNumber() > 0) { - // objKyDbus.getAccessPointsNumber()>0 standard can get wireless accesspoints now + if (objBackThreadDBus.getAccessPointsNumber() > 0) { + // objBackThreadDBus.getAccessPointsNumber()>0 standard can get wireless accesspoints now emit enWifiDone(); emit btFinish(); break; @@ -210,15 +210,9 @@ void BackThread::execConnLan(QString connName, QString ifname, QString connectTy currConnLanUuid = connName; currConnLanType = connectType; QString mycmd; //连接命令 - KylinDBus objKyDbus; + KylinDBus objBackThreadDBus; - //先断开当前网卡对应的已连接有线网 -// QString uuid = objKyDbus.getConnLanNameByIfname(ifname); -// if (uuid != "--") { -// kylin_network_set_con_down(uuid.toUtf8().data()); -// } - - bool isWiredCableAlready = objKyDbus.getWiredCableStateByIfname(ifname); + bool isWiredCableAlready = objBackThreadDBus.getWiredCableStateByIfname(ifname); if (connectType == "bluetooth") { isWiredCableAlready = true; //对于蓝牙类型的网络不需要接入网线就可以连接 @@ -228,11 +222,6 @@ void BackThread::execConnLan(QString connName, QString ifname, QString connectTy } if (isWiredCableAlready) { - //if(objKyDbus.toConnectWiredNet(connName, ifname)) { //此处connName是有线网Uuid - // emit connDone(2); - //} else { - // emit connDone(8); - //} QStringList options; options << "-c" << mycmd; process->start("/bin/bash",options); @@ -406,11 +395,25 @@ void BackThread::execConnWifiPsk(QString cmd) } //to connected wireless network driectly do not need a password -void BackThread::execConnWifi(QString connName) +void BackThread::execConnWifi(QString connName, QString connIfName) { - //disConnLanOrWifi("wifi"); + qDebug() << "Will to connect wifi " << connName << " with wifi card named " < 000000002 " << wifiUuid; + cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli connection up '" + wifiUuid + "'\n"; + //cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli connection up '" + wifiUuid + "' ifname '" + connIfName + "'\n"; + } else { + //没有配置文件 + qDebug() << "-------------------------> 000000003" << connName; + cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli connection up '" + connName + "' ifname '" + connIfName + "'\n"; + } - QString cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli connection up '" + connName + "'\n"; cmdConnWifi->write(cmdStr.toUtf8().data()); } @@ -418,7 +421,7 @@ void BackThread::execReconnWIfi(QString uuid) { QString cmd = "nmcli connection down " + uuid; Utils::m_system(cmd.toUtf8().data()); - cmd = "nmcli connection up " + uuid; + cmd = "nmcli connection up " + uuid; Utils::m_system(cmd.toUtf8().data()); } @@ -444,8 +447,10 @@ void BackThread::dellConnectWifiResult(QString info) } else if(info.indexOf("unknown") != -1 || info.indexOf("not exist") != -1) { //qDebug() << "send this signal if the network we want to connect has not a configuration file"; emit connDone(2); + } else if (info.indexOf("The connection was not a Wi-Fi connection..") != -1) { + emit connDone(2); } else if(info.indexOf("not given") != -1 || info.indexOf("Secrets were required") != -1) { - //no need to handle this situation + //nothing need to do } else if(info.indexOf("Passwords or encryption keys are required") != -1){ //qDebug() << "password for '802-11-wireless-security.psk' not given in 'passwd-file'"; emit connDone(4); diff --git a/src/backthread.h b/src/backthread.h index 2b341ac8..5b9a6af3 100644 --- a/src/backthread.h +++ b/src/backthread.h @@ -59,7 +59,7 @@ public slots: void execEnWifi(); void execDisWifi(); void execConnLan(QString connName, QString ifname, QString connectType); - void execConnWifi(QString connName); + void execConnWifi(QString connName, QString connIfName); void execReconnWIfi(QString uuid); void execConnWifiPWD(QString connName, QString password, QString connType); void execConnWifiPsk(QString cmd); @@ -77,7 +77,6 @@ public slots: void onReadErrorLan(); void dellConnectLanResult(QString info); - signals: void enNetDone(); void disNetDone(); diff --git a/src/confform.cpp b/src/confform.cpp index 1a2a22d4..e46b1389 100644 --- a/src/confform.cpp +++ b/src/confform.cpp @@ -302,6 +302,11 @@ void ConfForm::on_btnSave_clicked() QString mWifiIfname = kylindbus.dbusWiFiCardName; this->isCreateNewNet = false; + if (mWifiIfname.isEmpty()) { + QString notifyTxt(tr("Wireless card not exist")); + kylindbus.showDesktopNotify(notifyTxt); + return; + } if (ui->cbType->currentIndex() == 1 && (ui->leAddr->text() != lastIpv4)) { //在手动配置网络的情况下以及当前的IP参数有更改的情况下,检测IP冲突 if (check_ip_conflict(mWifiIfname)) { diff --git a/src/kylin-dbus-interface.cpp b/src/kylin-dbus-interface.cpp index 0a4605dc..a2204e69 100644 --- a/src/kylin-dbus-interface.cpp +++ b/src/kylin-dbus-interface.cpp @@ -99,7 +99,7 @@ KylinDBus::KylinDBus(MainWindow *mainWindow, QObject *parent) :QObject(parent) qDebug()<<"Can not find wired device object path when using dbus."; } - if (wirelessPath.path() != "") { + if (!multiWirelessPaths.isEmpty()) { getWirelessCardName();//获取无线网卡名称 } else { syslog(LOG_DEBUG, "Can not find wireless device object path when using dbus."); @@ -282,8 +282,13 @@ void KylinDBus::getWiredCardName() //获取无线网卡名称 void KylinDBus::getWirelessCardName() { + if (multiWirelessPaths.size() == 0) { + dbusWiFiCardName = ""; + return; + } + QDBusInterface lanInterface( "org.freedesktop.NetworkManager", - wirelessPath.path(), + multiWirelessPaths.at(0).path(), "org.freedesktop.DBus.Properties", QDBusConnection::systemBus() ); @@ -720,7 +725,7 @@ void KylinDBus::getWifiMac(QString netName) dbusWifiMac = ""; QDBusInterface interface( "org.freedesktop.NetworkManager", - wirelessPath.path(), + multiWirelessPaths.at(0).path(), "org.freedesktop.NetworkManager.Device.Wireless", QDBusConnection::systemBus() ); @@ -753,7 +758,7 @@ void KylinDBus::getWifiMac(QString netName) int KylinDBus::getAccessPointsNumber() { QDBusInterface interface( "org.freedesktop.NetworkManager", - wirelessPath.path(), + multiWirelessPaths.at(0).path(), "org.freedesktop.NetworkManager.Device.Wireless", QDBusConnection::systemBus() ); @@ -828,6 +833,42 @@ QStringList KylinDBus::getWifiSsidList() return wifiSsidList; } +QString KylinDBus::checkHasWifiConfigFile(QString wifiName) +{ + QString wifiUuid = ""; + + QDBusInterface m_interface("org.freedesktop.NetworkManager", + "/org/freedesktop/NetworkManager/Settings", + "org.freedesktop.NetworkManager.Settings", + QDBusConnection::systemBus() ); + QDBusReply> m_reply = m_interface.call("ListConnections"); + + QDBusObjectPath specific_connection; + specific_connection.setPath("/"); + + QList m_objSettingPaths = m_reply.value(); + foreach (QDBusObjectPath objSettingPath, m_objSettingPaths) { + QDBusInterface m_interface("org.freedesktop.NetworkManager", + objSettingPath.path(), + "org.freedesktop.NetworkManager.Settings.Connection", + QDBusConnection::systemBus()); + QDBusMessage result = m_interface.call("GetSettings"); + + const QDBusArgument &dbusArg1st = result.arguments().at( 0 ).value(); + QMap> map; + dbusArg1st >> map; + + if (map.value("connection").value("type").toString() == "802-11-wireless") { + if (map.value("connection").value("id").toString().indexOf(wifiName) != -1) { + qDebug() << "-------------------------> wifi id : " < getAtiveLanSsidUuidState(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 602fcb72..21251599 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1025,7 +1025,7 @@ void MainWindow::onNetworkDeviceAdded(QDBusObjectPath objPath) objKyDBus->isWirelessCardOn = false; objKyDBus->getObjectPath(); - if (objKyDBus->wirelessPath.path() == objPath.path()) { //证明添加的是无线网卡 + if (objKyDBus->multiWirelessPaths.at(0).path() == objPath.path()) { //证明添加的是无线网卡 is_wireless_adapter_ready = 0; if (objKyDBus->isWirelessCardOn) { syslog(LOG_DEBUG,"wireless device is already plug in"); @@ -1040,7 +1040,7 @@ void MainWindow::onNetworkDeviceAdded(QDBusObjectPath objPath) void MainWindow::onNetworkDeviceRemoved(QDBusObjectPath objPath) { //仅处理无线网卡拔出情况 - if (objKyDBus->wirelessPath.path() == objPath.path()) { + if (objKyDBus->multiWirelessPaths.at(0).path() == objPath.path()) { objKyDBus->isWirelessCardOn = false; objKyDBus->getObjectPath(); //检查是不是还有无线网卡 if (!objKyDBus->isWirelessCardOn) { @@ -1365,7 +1365,7 @@ void MainWindow::on_btnWifiList_clicked() // 当前连接的wifi OneConnForm *ccf = new OneConnForm(topWifiListWidget, this, confForm, ksnm); - ccf->setName(tr("Not connected"), "--", "--");//"当前未连接任何 Wifi" + ccf->setName(tr("Not connected"), "--", "--", "--");//"当前未连接任何 Wifi" ccf->setSignal("0", "--"); ccf->setRate("0"); ccf->setConnedString(1, tr("Disconnected"), "");//"未连接" @@ -1775,7 +1775,7 @@ void MainWindow::getConnListDone(QStringList slist) if (! is_stop_check_net_state) { this->is_stop_check_net_state = 1; BackThread *bt = new BackThread(); - bt->execConnWifi(lastAddedConn); + bt->execConnWifi(lastAddedConn, objKyDBus->dbusWiFiCardName); connect(bt, SIGNAL(connDone(int)), this, SLOT(connWifiDone(int))); } } @@ -2062,7 +2062,7 @@ void MainWindow::loadWifiListDone(QStringList slist) // 根据当前连接的wifi 设置OneConnForm OneConnForm *ccf = new OneConnForm(topWifiListWidget, this, confForm, ksnm); if (actWifiName == "--" || wifiActState == 1 || actWifiBssidList.at(0) == "--") { - ccf->setName(tr("Not connected"), "--", "--");//"当前未连接任何 Wifi" + ccf->setName(tr("Not connected"), "--", "--", "--");//"当前未连接任何 Wifi" ccf->setSignal("0", "--"); activeWifiSignalLv = 0; ccf->setConnedString(1, tr("Disconnected"), "");//"未连接" @@ -2193,7 +2193,7 @@ void MainWindow::loadWifiListDone(QStringList slist) QString m_name; if (path != "" && !path.isEmpty()) m_name= this->objKyDBus->getWifiSsid(QString("/org/freedesktop/NetworkManager/AccessPoint/%1").arg(path.mid(path.lastIndexOf("/") + 1))); if (m_name.isEmpty() || m_name == "") { - ccf->setName(wname, wbssid, actWifiUuid); + ccf->setName(wname, wbssid, actWifiUuid, objKyDBus->dbusWiFiCardName); if (!canReconnectWifiList.contains(wname)) { canReconnectWifiList.append(wname); } else { @@ -2201,7 +2201,7 @@ void MainWindow::loadWifiListDone(QStringList slist) canReconnectWifiList.append(wname); } } else { - ccf->setName(m_name, wbssid, actWifiUuid); + ccf->setName(m_name, wbssid, actWifiUuid, objKyDBus->dbusWiFiCardName); if (!canReconnectWifiList.contains(m_name)) { canReconnectWifiList.append(m_name); } else { @@ -2238,9 +2238,9 @@ void MainWindow::loadWifiListDone(QStringList slist) QString m_name; if (path != "" && !path.isEmpty()) m_name= this->objKyDBus->getWifiSsid(QString("/org/freedesktop/NetworkManager/AccessPoint/%1").arg(path.mid(path.lastIndexOf("/") + 1))); if (m_name.isEmpty() || m_name == "") { - ocf->setName(wname, wbssid, actWifiUuid); + ocf->setName(wname, wbssid, actWifiUuid, objKyDBus->dbusWiFiCardName); } else { - ocf->setName(m_name, wbssid, actWifiUuid); + ocf->setName(m_name, wbssid, actWifiUuid, objKyDBus->dbusWiFiCardName); } //ocf->setRate(wrate); ocf->setLine(true); @@ -2440,14 +2440,13 @@ void MainWindow::updateWifiListDone(QStringList slist) wifiListWidget->resize(W_LIST_WIDGET, wifiListWidget->height() + H_NORMAL_ITEM); OneConnForm *addItem = new OneConnForm(wifiListWidget, this, confForm, ksnm); connect(addItem, SIGNAL(selectedOneWifiForm(QString,int)), this, SLOT(oneWifiFormSelected(QString,int))); -// addItem->setName(wname, wbssid, "--"); QString path = line.mid(indexPath).trimmed(); QString m_name; if (path != "" && !path.isEmpty()) m_name= this->objKyDBus->getWifiSsid(QString("/org/freedesktop/NetworkManager/AccessPoint/%1").arg(path.mid(path.lastIndexOf("/") + 1))); if (m_name.isEmpty() || m_name == "") { - addItem->setName(wname, wbssid, actWifiUuid); + addItem->setName(wname, wbssid, actWifiUuid, objKyDBus->dbusWiFiCardName); } else { - addItem->setName(m_name, wbssid, actWifiUuid); + addItem->setName(m_name, wbssid, actWifiUuid, objKyDBus->dbusWiFiCardName); } //addItem->setRate(wrate); addItem->setLine(false); @@ -3109,7 +3108,7 @@ void MainWindow::disWifiDoneChangeUI() OneConnForm *ocf = wifiList.at(i); if (ocf->isActive == true) { ocf->setSelected(false, false); - ocf->setName(tr("Not connected"), "--", "--");//"当前未连接任何 Wifi" + ocf->setName(tr("Not connected"), "--", "--", "--");//"当前未连接任何 Wifi" ocf->setSignal("0", "--"); ocf->setConnedString(1, tr("Disconnected"), "");//"未连接" ocf->lbFreq->hide(); diff --git a/src/oneconnform.cpp b/src/oneconnform.cpp index 28c9a022..37a34f6a 100644 --- a/src/oneconnform.cpp +++ b/src/oneconnform.cpp @@ -400,7 +400,7 @@ void OneConnForm::setConnedString(bool showLable, QString str, QString str1) } } -void OneConnForm::setName(QString name, QString bssid, QString uuid) +void OneConnForm::setName(QString name, QString bssid, QString uuid, QString ifname) { QFontMetrics fontMetrics(lbNameText->font()); QString showname = fontMetrics.elidedText(name, Qt::ElideRight, 200); @@ -408,6 +408,7 @@ void OneConnForm::setName(QString name, QString bssid, QString uuid) wifiName = name; wifiBSsid = bssid; wifiUuid = uuid; + wifiIfName = ifname; } QString OneConnForm::getName() @@ -511,7 +512,7 @@ void OneConnForm::setWifiInfo(QString str1, QString str2, QString str3, int freq void OneConnForm::slotConnWifi() { this->startWaiting(true); - emit sigConnWifi(wifiName); + emit sigConnWifi(wifiName, wifiIfName); } void OneConnForm::slotConnWifiPWD() { @@ -705,7 +706,7 @@ void OneConnForm::toConnectWirelessNetwork() bt->moveToThread(t); connect(t, SIGNAL(finished()), t, SLOT(deleteLater())); connect(t, SIGNAL(started()), this, SLOT(slotConnWifi())); - connect(this, SIGNAL(sigConnWifi(QString)), bt, SLOT(execConnWifi(QString))); + connect(this, SIGNAL(sigConnWifi(QString, QString)), bt, SLOT(execConnWifi(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 ab8b1577..b3132ff1 100644 --- a/src/oneconnform.h +++ b/src/oneconnform.h @@ -65,7 +65,7 @@ public: ~OneConnForm(); void setSignal(QString lv, QString secu); - void setName(QString name, QString bssid, QString uuid); + void setName(QString name, QString bssid, QString uuid, QString isname); QString getName(); void setRate(QString rate); void setLine(bool isShow); @@ -85,6 +85,7 @@ public: QString wifiName; QString wifiBSsid; QString wifiUuid; + QString wifiIfName; QString connType; QString wifiSecu; QLabel * lbFreq = nullptr; @@ -152,7 +153,7 @@ signals: void disconnActiveWifi(); void requestRefreshWifiList(); - void sigConnWifi(QString); + void sigConnWifi(QString, QString); void sigConnWifiPWD(QString, QString, QString); void sigConnWifiPsk(QString); }; diff --git a/src/wpawifidialog.cpp b/src/wpawifidialog.cpp index 6dd39f71..c914ef77 100644 --- a/src/wpawifidialog.cpp +++ b/src/wpawifidialog.cpp @@ -466,6 +466,11 @@ void WpaWifiDialog::slot_on_connectBtn_clicked() { //获取网卡名称 KylinDBus mkylindbus; QString wifi_card_name= mkylindbus.dbusWiFiCardName; + if (wifi_card_name.isEmpty()) { + QString notifyTxt(tr("Wireless card not exist")); + mkylindbus.showDesktopNotify(notifyTxt); + return; + } qDebug()<<"qDebug: 无配置文件,使用如下配置新建配置文件:"<<"\n"<< "qDebug: con-name & ssid: "<text()<<"\n"<< "qDebug: wifi card name(ifname): "<yRrp=eoZiUw$lN9~-la*VgV%mdW{(*k_T;{&-z0bY(xzEdQ?Xu?m zvX#NoO(Nw)BEbqhDp*cLqq>Qldr4UTHj#E63E#C46?Z}JNm7=$h$?53a%>@y`ZUyC zf`JoYm>EXih4Ffr^a`A6Pea4i-;vpYzq5aUB^Fq@laz~g6P56U8&7b+<)r+H11z{q z+FNl%LsQ6ZdX0l$35x_+mQUX1twd!nulhGcx=r1sCL*IA23NrFkKn*7Fi{2vd*F~3 znBEGr{Nac-bm7SNMEdzK@DL0;0;5L5_v!X~S~m_ei&C2LvFfhx0M=`C6N)kdQHX|e-<7Vzq4$W9k*;xn2q>$USZxs&9B zkG68ZUGAu1wHA5Zb}x_fBQ&)q`d=!nn}`Q<~S4+igs5gKT5!^8=2@ESPeXPABuW>rH^zay>*cBz{4Lnn++ zd4}`m8)4>g$-rCnP}u1Gj7VmJDhCu5(Em6b@HI47!yMVOrii~7g) z_CH@SSLl#39ub9_gpNLA--ou>g^n3kK8nv_#tPxEmIGC9gkl#ASOh~Zz{ms`I}_Tx zFm)<)M!`%;=pM=A<#h{EZ%{l@>0#x7B;JzZo3M1e(minjk-S$~7C)Dh=xb&9dOn)G z=apkmaZcz(<>A&{ymOx^|0uu9Te?}LI{7(~D_xb?$+=UhQcYgIhLi0b)%?AjE4oQA zv;@Xws-7%R<0qlvFF;cPjCdPb&cnoeFvSkjK31KH-p{w>nCjOw-nr66YOVe(2X+z$ zsbJJL82>3ux}mm)^KA+3fpO9yG?L=g`8h{<#Xaf|hu`NUJPD15U~n&tcn(@xU}75_ zd>y8_U`8p-`W<=>s?VyLiL$Hw_Flclffhk2@C`J=mcS?rjL(AhNig##=otbld;Hq} z1I4}?<*qOd$uq5oYNQUuLwVaz3HJpfZKLdR<8z5|Pcq4#B2 zu}eE=O(qwx8g0|qHL zcw!$Pjcvd7t1pIePARlERtkJuTEu{dn|TLc5*^MZyl|uFmU{Sc#W-=wF|PRoMDewl z3w+I1h|8`_=8i0J#d`@{2OdLh7xZ5Q%{Ca51g&bA@(OgMz>IU^uD&m1vQ2z%9oLo0 z2Vz%6Cz0o|D4lwf&pd6uF8CTxC|{w=UwoY($kJ5~=USiBqia00mOn0?aHK=GXUrT9 zG#5s1g@YP&ZBKEoC}MQ`wsJl3TMe^1bmvQW{N#uF$USaeSeQOxPcSd+EqzYmFMJek zNx#WFnqNGt-|}D#7m6J)&#ia9qX&F;Nd~X5mv6~dLqm2r zpWz>dhKX!xtYKSS-wwJA$Cvhf%)T{zX&hCv;121my(QHYv@KmPhI?=AP;d+s^sR@KWM)yY=7N_UBr zqltttn9>AoCy0jGi7b;z*zgCD_z4NORuBzY0`sd#nP(*`jwNMj4v~5p)NO^%?$DzZ z`W%L)OVDhAUqwH|z|!|3X*T{&*#w8Q!{TyMF8!S-k3YEa951+#ly`W6+1p8cZX!y3 zOfhbYc=5$B=M1#TD8Fhek;-N_hD*>@3q7Ypzh7bSNf^-$2ijo#7cl86 zEEz_vCvOw!lb~}2?7s;5I>VqyD4ENtt7rsKx>XizzCjcbD$8t-<6YQgV}>2!aCXY3 zwxtoc26@UOPwgVgd?JsV z#A@2*Q+MRETcDfmqY@2hlh1IPOcWn3pK-T`Cu)-4fBc%m^O-_(bRtnky&|l27E#(E zg~gi}H24Qa{B-`X=m8zI&}}93+7JExV90wITd$ayev_zQBMcbXt3(tQt@x#_f~fGd zqQOf?d98`z-lQh><36#F~Y&s8O6ZD}-;) zN(K(qabaWrUqmuDsC*8^)6j7->{kQ517Ls&hJJuiQ(;^nOt8b`XE3L4-n_ow7g>b{ zDd9bldyCM}Yv9)~JVR)h*;{@KU_y~_Lga<2OQCiNbjpS98=-dx42*%{Y8V{~p0oIR4v%UxuWxg9x534uj=Cl z9nMP_7|%dAIrN$Y2dsl34KVTvjGdwS+rOSDr&9GWmLpe?s}}VwTy|B^xe5A?fkE@2 zd5=2GldHvJDKtqH7=+(fXQiLw9XG2FX1?Vltb)c0=z0u#`M?1-7%~k;*1~}=VS)op z-V0Obs#{c5L@9m_d+vAeLIo%}XJgPm5Bju2(;FD$36r+Ll&7$GsYBgUu4ik6#v0BO z=A>$@mP$@y*4pbgngaVz{Go2>k_>&X!JsD}l_;hX53J)flP+`n%o8+~@1uzNt2H~k zpRpg<=R}?fnkM;tF4JimdlsLu{w#D+!2TDZ?`9Zu6vh<75$W} zSFZp3QgNb_>%oU<;88< z2Xjs-#K)@zt`?it>A%e!!7y!{Wf@2MiZ)Sd=ASD*)s8>IJ>Si)T@=vDWmcrExmV6F zlC`V$1#=&0gyItDmJ-;j-3 z>C!en^VlSvYX^T&zDk!>-O2U)MpvB4y*_=Zu6E=cUf4V6KMIB>>JAL&+)xDQj%?-r z;V={?&(__{wRhyIn@8?gKJ%RBfItKIS)7jUHVPlBl!PX^jo?|a$opd!oaB& zdf1@PTxd##;k#jU1GKD#DP#5LF7i$k)%qLDYq$}K`gaSe_>xJ7{##(^JcHYgV|>k* zK$lg}PcmT;oCRa9L+fF~phMk!3qCaD3w!viMj7U(cyhAtGt3{|>pjEvsl5@i8qO}~ z%d2Rm;exT6bLlj6S`2-BVc>QcT@EcShUSx8Wm4e*!-IwExh#~1_xHFgGRus*4&G6E zi!mbhC1>d>m^clly@t7Kj6)7j;P+lIp$n#^!(1QZl-(vif)U2s;VZd6D2New network already created 已创建新的有线网络 + + + Wireless card not exist + 没找到无线网卡 + New network settings already finished @@ -1885,5 +1890,10 @@ WPA and WPA2 Enterprise WPA 及 WPA2企业 + + + Wireless card not exist + 没找到无线网卡 +