From bd952dcef2ead3b0b7e2d730930a3fc528813ee0 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Thu, 21 Dec 2023 22:27:12 +0100 Subject: [PATCH] systemd: add HYPRLAND_NO_SD_NOTIFY fixes #4217 --- src/Compositor.cpp | 18 ++++++++---------- src/helpers/MiscFunctions.cpp | 7 +++++++ src/helpers/MiscFunctions.hpp | 1 + src/main.cpp | 2 +- src/render/Renderer.cpp | 4 +--- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index c7be066218b..e4243a4e27a 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -125,13 +125,12 @@ void CCompositor::initServer() { initManagers(STAGE_PRIORITY); - if (const auto ENV = getenv("HYPRLAND_TRACE"); ENV && std::string(ENV) == "1") + if (envEnabled("HYPRLAND_TRACE")) Debug::trace = true; wlr_log_init(WLR_INFO, NULL); - const auto LOGWLR = getenv("HYPRLAND_LOG_WLR"); - if (LOGWLR && std::string(LOGWLR) == "1") + if (envEnabled("HYPRLAND_LOG_WLR")) wlr_log_init(WLR_DEBUG, Debug::wlrLog); else wlr_log_init(WLR_ERROR, Debug::wlrLog); @@ -343,7 +342,7 @@ void CCompositor::cleanup() { Debug::shuttingDown = true; #ifdef USES_SYSTEMD - if (sd_booted() > 0) + if (sd_booted() > 0 && !envEnabled("HYPRLAND_NO_SD_NOTIFY")) sd_notify(0, "STOPPING=1"); #endif @@ -540,10 +539,11 @@ void CCompositor::startCompositor() { g_pHyprRenderer->setCursorFromName("left_ptr"); #ifdef USES_SYSTEMD - if (sd_booted() > 0) + if (sd_booted() > 0) { // tell systemd that we are ready so it can start other bond, following, related units - sd_notify(0, "READY=1"); - else + if (!envEnabled("HYPRLAND_NO_SD_NOTIFY")) + sd_notify(0, "READY=1"); + } else Debug::log(LOG, "systemd integration is baked in but system itself is not booted à la systemd!"); #endif @@ -2598,9 +2598,7 @@ int CCompositor::getNewSpecialID() { } void CCompositor::performUserChecks() { - const auto atomicEnv = getenv("WLR_DRM_NO_ATOMIC"); - const auto atomicEnvStr = std::string(atomicEnv ? atomicEnv : ""); - if (g_pConfigManager->getInt("general:allow_tearing") == 1 && atomicEnvStr != "1") { + if (g_pConfigManager->getInt("general:allow_tearing") == 1 && !envEnabled("WLR_DRM_NO_ATOMIC")) { g_pHyprNotificationOverlay->addNotification("You have enabled tearing, but immediate presentations are not available on your configuration. Try adding " "env = WLR_DRM_NO_ATOMIC,1 to your config.", CColor(0), 15000, ICON_WARNING); diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 6eab7e2b1c8..5eb99bfd46e 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -791,4 +791,11 @@ uint32_t glFormatToType(uint32_t gl) { GL_UNSIGNED_INT_2_10_10_10_REV : #endif GL_UNSIGNED_BYTE; +} + +bool envEnabled(const std::string& env) { + const auto ENV = getenv(env.c_str()); + if (!ENV) + return false; + return std::string(ENV) == "1"; } \ No newline at end of file diff --git a/src/helpers/MiscFunctions.hpp b/src/helpers/MiscFunctions.hpp index d8070c76ba7..1ccbdc0e68e 100644 --- a/src/helpers/MiscFunctions.hpp +++ b/src/helpers/MiscFunctions.hpp @@ -35,6 +35,7 @@ std::vector getBacktrace(); void throwError(const std::string& err); uint32_t drmFormatToGL(uint32_t drm); uint32_t glFormatToType(uint32_t gl); +bool envEnabled(const std::string& env); template [[deprecated("use std::format instead")]] std::string getFormat(std::format_string fmt, Args&&... args) { diff --git a/src/main.cpp b/src/main.cpp index 86c44857e1c..2edf36018bf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -102,7 +102,7 @@ int main(int argc, char** argv) { g_pCompositor->initServer(); - if (!getenv("HYPRLAND_NO_RT") || configStringToInt(std::string(getenv("HYPRLAND_NO_RT"))) == 0) + if (!envEnabled("HYPRLAND_NO_RT")) Init::gainRealTime(); Debug::log(LOG, "Hyprland init finished."); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 49bc84bd352..2397849aa7f 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -9,9 +9,7 @@ extern "C" { } CHyprRenderer::CHyprRenderer() { - const auto ENV = getenv("WLR_DRM_NO_ATOMIC"); - - if (ENV && std::string(ENV) == "1") + if (envEnabled("WLR_DRM_NO_ATOMIC")) m_bTearingEnvSatisfied = true; if (g_pCompositor->m_sWLRSession) {