[Solved]Lost Wifi settings after reboot
-
I use in my app code from here
https://code.qt.io/cgit/qt/qtdeviceutilities.git/tree/examples/deviceutilities/settingsuiapp/DeviceUtilities/SettingsUI/Network
to make "Settings page".
I can set WiFi parameters. Its works fine, but when I reboot (Qt6.x Raspberry CM4 with boot2qt distro) I lost my WiFi settings and need re-enter it again.In what place parameters saved and restored?
I also try example code from
https://doc.qt.io/QtDeviceUtilities-6.2/qnetworksettingsmanager.html#detailsI put
#include <QtNetworkSettings/QNetworkSettingsManager>
and add in main
wifiManager = new QNetworkSettingsManager(this); wifiManager->connectBySsid("mySSID","my_passwod");
but get error
/home/qtemb/FertiGUI/main.cpp:568: error: invalid use of ‘this’ in non-member function /home/qtemb/FertiGUI/main.cpp:568:47: error: invalid use of ‘this’ in non-member function 568 | wifiManager = new QNetworkSettingsManager(this); | ^~~~
-
I use in my app code from here
https://code.qt.io/cgit/qt/qtdeviceutilities.git/tree/examples/deviceutilities/settingsuiapp/DeviceUtilities/SettingsUI/Network
to make "Settings page".
I can set WiFi parameters. Its works fine, but when I reboot (Qt6.x Raspberry CM4 with boot2qt distro) I lost my WiFi settings and need re-enter it again.In what place parameters saved and restored?
I also try example code from
https://doc.qt.io/QtDeviceUtilities-6.2/qnetworksettingsmanager.html#detailsI put
#include <QtNetworkSettings/QNetworkSettingsManager>
and add in main
wifiManager = new QNetworkSettingsManager(this); wifiManager->connectBySsid("mySSID","my_passwod");
but get error
/home/qtemb/FertiGUI/main.cpp:568: error: invalid use of ‘this’ in non-member function /home/qtemb/FertiGUI/main.cpp:568:47: error: invalid use of ‘this’ in non-member function 568 | wifiManager = new QNetworkSettingsManager(this); | ^~~~
@Kuzma30 said in Lost Wifi settings after reboot:
Generally: Please format your code, using the respective functions in the menu.
It makes things so much easier to read for those who want to help.and add in main
wifiManager = new QNetworkSettingsManager(this);
The parent argument
this
doesn't refer to anything, becausemain
is not a class member.I don't know if this is the reason for loosing / not restoring the WiFi settings.
It's documented here, how to obtain the name of the settings file. -
I add this code to my class for system parameters
class MySystem : public QObject { Q_OBJECT .... Q_PROPERTY ...... public: void connectWiFi() { auto wifiManager = new QNetworkSettingsManager(this); QString ssid = "mySSID"; QString password = "myPassword"; wifiManager->connectBySsid(ssid,password); }
and get error during linking
:-1: error: CMakeFiles/Ferti.dir/main.cpp.o: in function
MySystem::connectWiFi()': /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:-1: error: undefined reference to
QNetworkSettingsManager::QNetworkSettingsManager(QObject*)'
:-1: error: /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:47:(.text._ZN8MySystem11connectWiFiEv[_ZN8MySystem11connectWiFiEv]+0x58): undefined reference to `QNetworkSettingsManager::connectBySsid(QString const&, QString const&)' -
I add this code to my class for system parameters
class MySystem : public QObject { Q_OBJECT .... Q_PROPERTY ...... public: void connectWiFi() { auto wifiManager = new QNetworkSettingsManager(this); QString ssid = "mySSID"; QString password = "myPassword"; wifiManager->connectBySsid(ssid,password); }
and get error during linking
:-1: error: CMakeFiles/Ferti.dir/main.cpp.o: in function
MySystem::connectWiFi()': /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:-1: error: undefined reference to
QNetworkSettingsManager::QNetworkSettingsManager(QObject*)'
:-1: error: /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:47:(.text._ZN8MySystem11connectWiFiEv[_ZN8MySystem11connectWiFiEv]+0x58): undefined reference to `QNetworkSettingsManager::connectBySsid(QString const&, QString const&)'@Kuzma30 said in Lost Wifi settings after reboot:
QNetworkSettingsManager
You can not find the class QNetworkSettingsManager From here
https://doc.qt.io/qt-6/classes.html
Was it dropped in Qt6? I guess you are running Qt6 example.
What are your Qt version and OS? -
@Kuzma30 said in Lost Wifi settings after reboot:
QNetworkSettingsManager
You can not find the class QNetworkSettingsManager From here
https://doc.qt.io/qt-6/classes.html
Was it dropped in Qt6? I guess you are running Qt6 example.
What are your Qt version and OS? -
@JoeCFD said in Lost Wifi settings after reboot:
QNetworkSettingsManager
Qt 6.7.0 (boot2qt distro), OS linux
@Kuzma30
But there's noQNetworkSettingsManager
in 6.7.... -
@Kuzma30
But there's noQNetworkSettingsManager
in 6.7....@Axel-Spoerl
Agree (I don't know from where I get this files in my bsp). Now I rolling back to 6.6.
How to connect to WiFI nbetwork with SSID and password in v6.6? -
@Axel-Spoerl
Agree (I don't know from where I get this files in my bsp). Now I rolling back to 6.6.
How to connect to WiFI nbetwork with SSID and password in v6.6?@Kuzma30
It was removed.
The reason, in a nutshell, is that the OS typically takes care of that and an application shouldn't manage its own network settings. -
@Kuzma30
It was removed.
The reason, in a nutshell, is that the OS typically takes care of that and an application shouldn't manage its own network settings.@Axel-Spoerl
But this code works in QML 6.6 (Set button for enter password for SSID)QtButton{ id: setButton text: qsTr("SET") height: GUIParam.dialogButtonSize onClicked: { if (showSsid) { NetworkSettingsManager.connectBySsid(ssidField.text, passField.text) showSsid = false } else { NetworkSettingsManager.userAgent.setPassphrase(passField.text) } passphrasePopup.visible = false; } }
-
@Axel-Spoerl
But this code works in QML 6.6 (Set button for enter password for SSID)QtButton{ id: setButton text: qsTr("SET") height: GUIParam.dialogButtonSize onClicked: { if (showSsid) { NetworkSettingsManager.connectBySsid(ssidField.text, passField.text) showSsid = false } else { NetworkSettingsManager.userAgent.setPassphrase(passField.text) } passphrasePopup.visible = false; } }
@Kuzma30
Can you post a screenshot of what it does, when it runs? -
@Kuzma30
Can you post a screenshot of what it does, when it runs?I make photo of procedure connecting to WiFi in my app. User can't access to system parameters.
-
I am trying auto connect to wifi when main window loaded from ssid andd pass
Component.onCompleted: { console.log("Check WiFi param") var ssid = param.getParameterValue("WIFI_SSID") if (ssid !== "none") { console.log("Power On WiFi") for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, 0); wifiInterface.powered = true; pauseWiFi.start() console.log("power on") } NetworkSettingsManager.interfacesChanged(); wifiSwitchTimer.start(); } } Timer { id: pauseWiFi interval: 1000 running: false } Timer { id: wifiSwitchTimer interval: 5000 running: false onTriggered: { var ssid = param.getParameterValue("WIFI_SSID") var pass = param.getParameterValue("WIFI_PASSWORD") console.log("Connecting to WiFi " + ssid) NetworkSettingsManager.connectBySsid(ssid, pass) } }
But I get error
Tried to scan while not powered
-
I am trying auto connect to wifi when main window loaded from ssid andd pass
Component.onCompleted: { console.log("Check WiFi param") var ssid = param.getParameterValue("WIFI_SSID") if (ssid !== "none") { console.log("Power On WiFi") for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, 0); wifiInterface.powered = true; pauseWiFi.start() console.log("power on") } NetworkSettingsManager.interfacesChanged(); wifiSwitchTimer.start(); } } Timer { id: pauseWiFi interval: 1000 running: false } Timer { id: wifiSwitchTimer interval: 5000 running: false onTriggered: { var ssid = param.getParameterValue("WIFI_SSID") var pass = param.getParameterValue("WIFI_PASSWORD") console.log("Connecting to WiFi " + ssid) NetworkSettingsManager.connectBySsid(ssid, pass) } }
But I get error
Tried to scan while not powered
Updated code. More progress.
Component.onCompleted: { NetworkSettingsManager.interfacesChanged() pauseWiFi.start() } Timer { id: pauseWiFi interval: 3000 running: false onTriggered: { NetworkSettingsManager.services.type = NetworkSettingsType.Wifi; console.log("Check WiFi param") var ssid = param.getParameterValue("WIFI_SSID") if (ssid !== "none") { console.log("Power On WiFi") //sc.setWiFiOn() for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { console.log("i="+i) var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i); wifiInterface.powered = true; console.log("power on") } } wifiSwitchTimer.start(); } } Timer { id: wifiSwitchTimer interval: 5000 running: false onTriggered: { var ssid = param.getParameterValue("WIFI_SSID") var pass = param.getParameterValue("WIFI_PASSWORD") console.log("Connecting to WiFi \""+ ssid + "\"") NetworkSettingsManager.userAgent.setPassphrase(pass) NetworkSettingsManager.connectBySsid(ssid, pass) NetworkSettingsManager.interfacesChanged() } }
Now program poweron WiFi, NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) != null.
But result of connectBySsid() with correct ssid and pass - powered on WiFi but without connection.
I try code with and without NetworkSettingsManager.interfacesChanged() in the end. Same results. -
Updated code. More progress.
Component.onCompleted: { NetworkSettingsManager.interfacesChanged() pauseWiFi.start() } Timer { id: pauseWiFi interval: 3000 running: false onTriggered: { NetworkSettingsManager.services.type = NetworkSettingsType.Wifi; console.log("Check WiFi param") var ssid = param.getParameterValue("WIFI_SSID") if (ssid !== "none") { console.log("Power On WiFi") //sc.setWiFiOn() for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { console.log("i="+i) var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i); wifiInterface.powered = true; console.log("power on") } } wifiSwitchTimer.start(); } } Timer { id: wifiSwitchTimer interval: 5000 running: false onTriggered: { var ssid = param.getParameterValue("WIFI_SSID") var pass = param.getParameterValue("WIFI_PASSWORD") console.log("Connecting to WiFi \""+ ssid + "\"") NetworkSettingsManager.userAgent.setPassphrase(pass) NetworkSettingsManager.connectBySsid(ssid, pass) NetworkSettingsManager.interfacesChanged() } }
Now program poweron WiFi, NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) != null.
But result of connectBySsid() with correct ssid and pass - powered on WiFi but without connection.
I try code with and without NetworkSettingsManager.interfacesChanged() in the end. Same results.Final code, that working for me
Component.onCompleted: { NetworkSettingsManager.interfacesChanged() pauseWiFi.start() } Timer { id: pauseWiFi interval: 3000 running: false onTriggered: { NetworkSettingsManager.services.type = NetworkSettingsType.Wifi; console.log("Check WiFi param") var ssid = param.getParameterValue("WIFI_SSID") if (ssid !== "none") { console.log("Power On WiFi") for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { console.log("i="+i) var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i); wifiInterface.powered = true; console.log("power on") } } wifiSwitchTimer.start(); } } property var connectingService: null Timer { id: wifiSwitchTimer interval: 5000 running: false onTriggered: { var ssid = param.getParameterValue("WIFI_SSID") var pass = param.getParameterValue("WIFI_PASSWORD") console.log("Connecting to WiFi \""+ ssid + "\"") for (var index = 0; index < 10; index++) { if (NetworkSettingsManager.services.itemFromRow(index).name===ssid){ console.log("Found SSID at index = "+ index) root.connectingService = NetworkSettingsManager.services.itemFromRow(index) } } root.connectingService.connectService(); NetworkSettingsManager.userAgent.setPassphrase(pass) vpntimer.start(); } } Timer{ id: vpntimer interval: 5000 running: false onTriggered: { console.log("Start VPN") processWrapper.executeCommand("systemctl start openvpn-client@client") } }