From 76229406e06553acbc60dac417f6d362a82ab722 Mon Sep 17 00:00:00 2001 From: mewoocat Date: Sat, 10 May 2025 13:59:41 -0500 Subject: [PATCH 1/7] intial investigation --- default.nix | 6 +++++- src/services/CMakeLists.txt | 4 ++++ src/services/networkmanager/CMakeLists.txt | 0 src/services/networkmanager/core.cpp | 0 src/services/pipewire/core.cpp | 2 +- 5 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 src/services/networkmanager/CMakeLists.txt create mode 100644 src/services/networkmanager/core.cpp diff --git a/default.nix b/default.nix index 79c9b7a4..de014d7c 100644 --- a/default.nix +++ b/default.nix @@ -18,6 +18,7 @@ libgbm ? null, xorg, pipewire, + networkmanager, pam, gitRev ? (let @@ -38,6 +39,7 @@ withWayland ? true, withX11 ? true, withPipewire ? true, + withNetworkmanager ? true, withPam ? true, withHyprland ? true, withI3 ? true, @@ -69,7 +71,8 @@ ++ lib.optionals withWayland ([ qt6.qtwayland wayland ] ++ (if libgbm != null then [ libdrm libgbm ] else [])) ++ lib.optional withX11 xorg.libxcb ++ lib.optional withPam pam - ++ lib.optional withPipewire pipewire; + ++ lib.optional withPipewire pipewire + ++ lib.optional withNetworkmanager networkmanager; cmakeBuildType = if debug then "Debug" else "RelWithDebInfo"; @@ -83,6 +86,7 @@ (lib.cmakeBool "WAYLAND" withWayland) (lib.cmakeBool "SCREENCOPY" (libgbm != null)) (lib.cmakeBool "SERVICE_PIPEWIRE" withPipewire) + (lib.cmakeBool "SERVICE_NETWORKMANAGER" withNetworkmanager) (lib.cmakeBool "SERVICE_PAM" withPam) (lib.cmakeBool "HYPRLAND" withHyprland) (lib.cmakeBool "I3" withI3) diff --git a/src/services/CMakeLists.txt b/src/services/CMakeLists.txt index 5ab5c550..173ddeaa 100644 --- a/src/services/CMakeLists.txt +++ b/src/services/CMakeLists.txt @@ -6,6 +6,10 @@ if (SERVICE_PIPEWIRE) add_subdirectory(pipewire) endif() +if (SERVICE_NETWORKMANAGER) + add_subdirectory(networkmanager) +endif() + if (SERVICE_MPRIS) add_subdirectory(mpris) endif() diff --git a/src/services/networkmanager/CMakeLists.txt b/src/services/networkmanager/CMakeLists.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/services/networkmanager/core.cpp b/src/services/networkmanager/core.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/services/pipewire/core.cpp b/src/services/pipewire/core.cpp index 9c2a3dbf..998b0cb1 100644 --- a/src/services/pipewire/core.cpp +++ b/src/services/pipewire/core.cpp @@ -52,7 +52,7 @@ PwCore::PwCore(QObject* parent): QObject(parent), notifier(QSocketNotifier::Read qCInfo(logLoop) << "Connecting to pipewire server."; this->core = pw_context_connect(this->context, nullptr, 0); if (this->core == nullptr) { - qCCritical(logLoop) << "Failed to connect pipewire context. Errno:" << errno; + qCCritical(logLoop) << "Failed to connect pipewire context. Errno:" << errno; return; } From 415cf05c162bb7ec59005b9bfb283fa363b6f45d Mon Sep 17 00:00:00 2001 From: mewoocat Date: Sun, 11 May 2025 00:39:09 -0500 Subject: [PATCH 2/7] class setup --- src/services/networkmanager/CMakeLists.txt | 23 ++++++++++++++++++++++ src/services/networkmanager/core.cpp | 18 +++++++++++++++++ src/services/networkmanager/core.hpp | 13 ++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/services/networkmanager/core.hpp diff --git a/src/services/networkmanager/CMakeLists.txt b/src/services/networkmanager/CMakeLists.txt index e69de29b..95df41c4 100644 --- a/src/services/networkmanager/CMakeLists.txt +++ b/src/services/networkmanager/CMakeLists.txt @@ -0,0 +1,23 @@ +find_package(PkgConfig REQUIRED) +pkg_check_modules(networkmanager REQUIRED IMPORTED_TARGET libnm) + +qt_add_library(quickshell-service-networkmanager STATIC + core.cpp +) + +qt_add_qml_module(quickshell-service-networkmanager + URI Quickshell.Services.Networkmanager + VERSION 0.1 + DEPENDENCIES QtQml +) + +qs_add_module_deps_light(quickshell-service-networkmanager Quickshell) + +install_qml_module(quickshell-service-networkmanager) + +target_link_libraries(quickshell-service-networkmanager PRIVATE + Qt::Qml PkgConfig::networkmanager + Qt::Quick # pch +) + +qs_module_pch(quickshell-service-networkmanager) diff --git a/src/services/networkmanager/core.cpp b/src/services/networkmanager/core.cpp index e69de29b..567ae019 100644 --- a/src/services/networkmanager/core.cpp +++ b/src/services/networkmanager/core.cpp @@ -0,0 +1,18 @@ +#include "core.hpp" +#include + +namespace qs::service::networkmanager { + +namespace { +Q_LOGGING_CATEGORY(logNetworkManager, "quickshell.service.networkmanager", QtWarningMsg); +} + +NetworkManager::NetworkManager(){ + auto bus = QDbusConnection::systemBus(); + + if (!bus.isConnected()) { + // Log message + } +} + +} diff --git a/src/services/networkmanager/core.hpp b/src/services/networkmanager/core.hpp new file mode 100644 index 00000000..2c7d4ed8 --- /dev/null +++ b/src/services/networkmanager/core.hpp @@ -0,0 +1,13 @@ +#pragma once +#include + +namespace qs::service::networkmanager { + +class NetworkManager : public QObject { + Q_OBJECT; +public: + static NetworkManager* instance(); // Get instance of the class + void test(); +}; + +} From d542038c45dc8843d7459de296ffafba37ec723c Mon Sep 17 00:00:00 2001 From: mewoocat Date: Mon, 12 May 2025 23:01:22 -0500 Subject: [PATCH 3/7] working on network service: cmake + dbus --- CMakeLists.txt | 1 + src/services/networkmanager/CMakeLists.txt | 19 +- src/services/networkmanager/core.cpp | 37 +- src/services/networkmanager/core.hpp | 6 +- .../org.freedesktop.NetworkManager.xml | 598 ++++++++++++++++++ 5 files changed, 656 insertions(+), 5 deletions(-) create mode 100644 src/services/networkmanager/org.freedesktop.NetworkManager.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index 846a280c..2393ab47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,7 @@ boption(SERVICE_MPRIS "Mpris" ON) boption(SERVICE_PAM "Pam" ON) boption(SERVICE_GREETD "Greetd" ON) boption(SERVICE_UPOWER "UPower" ON) +boption(SERVICE_NETWORKMANAGER "NetworkManager" ON) boption(SERVICE_NOTIFICATIONS "Notifications" ON) include(cmake/install-qml-module.cmake) diff --git a/src/services/networkmanager/CMakeLists.txt b/src/services/networkmanager/CMakeLists.txt index 95df41c4..0a50222b 100644 --- a/src/services/networkmanager/CMakeLists.txt +++ b/src/services/networkmanager/CMakeLists.txt @@ -1,22 +1,37 @@ find_package(PkgConfig REQUIRED) -pkg_check_modules(networkmanager REQUIRED IMPORTED_TARGET libnm) +# Not using libnm +#pkg_check_modules(networkmanager REQUIRED IMPORTED_TARGET libnm) + +set_source_files_properties(org.freedesktop.NetworkManager.xml PROPERTIES + CLASSNAME DBusNetworkManager + NO_NAMESPACE TRUE +) +qt_add_dbus_interface(DBUS_INTERFACES + org.freedesktop.NetworkManager.xml + dbus_service +) qt_add_library(quickshell-service-networkmanager STATIC core.cpp + ${DBUS_INTERFACES} ) +# dbus headers +target_include_directories(quickshell-service-networkmanager PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + qt_add_qml_module(quickshell-service-networkmanager URI Quickshell.Services.Networkmanager VERSION 0.1 DEPENDENCIES QtQml ) +# Not sure what this is doing qs_add_module_deps_light(quickshell-service-networkmanager Quickshell) install_qml_module(quickshell-service-networkmanager) target_link_libraries(quickshell-service-networkmanager PRIVATE - Qt::Qml PkgConfig::networkmanager + Qt::Qml Qt::Quick # pch ) diff --git a/src/services/networkmanager/core.cpp b/src/services/networkmanager/core.cpp index 567ae019..bce29ad8 100644 --- a/src/services/networkmanager/core.cpp +++ b/src/services/networkmanager/core.cpp @@ -1,10 +1,15 @@ -#include "core.hpp" #include +#include +#include +#include + +#include "core.hpp" +#include "dbus_service.h" namespace qs::service::networkmanager { namespace { -Q_LOGGING_CATEGORY(logNetworkManager, "quickshell.service.networkmanager", QtWarningMsg); +Q_LOGGING_CATEGORY(logNetworkManager, "quickshell.service.networkmanager", QtDebugMsg); } NetworkManager::NetworkManager(){ @@ -12,7 +17,35 @@ NetworkManager::NetworkManager(){ if (!bus.isConnected()) { // Log message + qCWarning(logNetworkManager) << "Could not connect to DBus. NetworkManager service will not work."; + return; + } + + this->service = new DBusNetworkManagerService("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager", bus, this); + + if (!this->service->isValid()) { + qCDebug(logNetworkManager) << "NetworkManager service is not currently running, attempting to start it."; + + dbus::tryLaunchService(this, bus, "org.freedesktop.NetworkManager", [this](bool success) { + if (success) { + qCDebug(logNetworkManager) << "Successfully launched NetworkManager service."; + this->init(); + } else { + qCWarning(logNetworkManager) << "Could not start NetworkManager. The NetworkManager service will not work."; + } + }); + } else { + this->init(); } } +NetworkManager* NetworkManager::instance() { + static NetworkManager* instance = new NetworkManager(); // NOLINT + return instance; +} + +void NetworkManager::init() { + qCDebug(logNetworkManager) << "Hi mom"; +} + } diff --git a/src/services/networkmanager/core.hpp b/src/services/networkmanager/core.hpp index 2c7d4ed8..9d234ce4 100644 --- a/src/services/networkmanager/core.hpp +++ b/src/services/networkmanager/core.hpp @@ -1,5 +1,7 @@ #pragma once #include +#include +#include "dbus_service.h" namespace qs::service::networkmanager { @@ -7,7 +9,9 @@ class NetworkManager : public QObject { Q_OBJECT; public: static NetworkManager* instance(); // Get instance of the class - void test(); +private: + DBUSNetworkservice* service = nullptr; + void init(); }; } diff --git a/src/services/networkmanager/org.freedesktop.NetworkManager.xml b/src/services/networkmanager/org.freedesktop.NetworkManager.xml new file mode 100644 index 00000000..c92c8017 --- /dev/null +++ b/src/services/networkmanager/org.freedesktop.NetworkManager.xml @@ -0,0 +1,598 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 27ace37d1aa40479d6378e6cca43e27a6f53162c Mon Sep 17 00:00:00 2001 From: mewoocat Date: Tue, 13 May 2025 05:54:23 -0500 Subject: [PATCH 4/7] Working on dbus nm types --- src/services/networkmanager/CMakeLists.txt | 3 ++- src/services/networkmanager/core.hpp | 5 +++++ .../org.freedesktop.NetworkManager.xml | 6 +++++- .../org.freedesktop.NetworkManager.xml.test | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/services/networkmanager/org.freedesktop.NetworkManager.xml.test diff --git a/src/services/networkmanager/CMakeLists.txt b/src/services/networkmanager/CMakeLists.txt index 0a50222b..4156c38e 100644 --- a/src/services/networkmanager/CMakeLists.txt +++ b/src/services/networkmanager/CMakeLists.txt @@ -32,7 +32,8 @@ install_qml_module(quickshell-service-networkmanager) target_link_libraries(quickshell-service-networkmanager PRIVATE Qt::Qml - Qt::Quick # pch + #Qt::Quick # pch + Qt::DBus ) qs_module_pch(quickshell-service-networkmanager) diff --git a/src/services/networkmanager/core.hpp b/src/services/networkmanager/core.hpp index 9d234ce4..6fa171d8 100644 --- a/src/services/networkmanager/core.hpp +++ b/src/services/networkmanager/core.hpp @@ -2,6 +2,11 @@ #include #include #include "dbus_service.h" +#include + +// Defining the "au" debus type +using NetworkManagerCapabilities = QList; +Q_DECLARE_METATYPE(NetworkManagerCapabilities); namespace qs::service::networkmanager { diff --git a/src/services/networkmanager/org.freedesktop.NetworkManager.xml b/src/services/networkmanager/org.freedesktop.NetworkManager.xml index c92c8017..8e6f2ed8 100644 --- a/src/services/networkmanager/org.freedesktop.NetworkManager.xml +++ b/src/services/networkmanager/org.freedesktop.NetworkManager.xml @@ -480,7 +480,9 @@ defined capability numbers. The array is guaranteed to be sorted in ascending order without duplicates. --> - + + + + + + - + + + - - + + + - - + +