diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 96831751..11834043 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -341,6 +341,28 @@ void CCompositor::removeAllSignals() { removeWLSignal(&Events::listen_sessionActive); } +void CCompositor::cleanEnvironment() { + // in compositor constructor + unsetenv("WAYLAND_DISPLAY"); + // in startCompositor + unsetenv("HYPRLAND_INSTANCE_SIGNATURE"); + + // in main + unsetenv("HYPRLAND_CMD"); + unsetenv("XDG_BACKEND"); + unsetenv("XDG_CURRENT_DESKTOP"); + + if (m_sWLRSession) { + const auto CMD = +#ifdef USES_SYSTEMD + "systemctl --user unset-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME && hash " + "dbus-update-activation-environment 2>/dev/null && " +#endif + "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME"; + g_pKeybindManager->spawn(CMD); + } +} + void CCompositor::cleanup() { if (!m_sWLDisplay || m_bIsShuttingDown) return; @@ -358,6 +380,8 @@ void CCompositor::cleanup() { Systemd::SdNotify(0, "STOPPING=1"); #endif + cleanEnvironment(); + // unload all remaining plugins while the compositor is // still in a normal working state. g_pPluginSystem->unloadAllPlugins(); diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 8be1956c..0ef006be 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -191,6 +191,7 @@ class CCompositor { private: void initAllSignals(); void removeAllSignals(); + void cleanEnvironment(); void setRandomSplash(); void initManagers(eManagersInitStage stage); void prepareFallbackOutput(); diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index cbfc43d8..423c45ca 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -27,7 +27,11 @@ CHyprXWaylandManager::CHyprXWaylandManager() { #endif } -CHyprXWaylandManager::~CHyprXWaylandManager() {} +CHyprXWaylandManager::~CHyprXWaylandManager() { +#ifndef NO_XWAYLAND + unsetenv("DISPLAY"); +#endif +} wlr_surface* CHyprXWaylandManager::getWindowSurface(PHLWINDOW pWindow) { if (pWindow->m_bIsX11)