From 07135c34526bea778de24930a28e88fbe8c2f63a Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Tue, 13 Oct 2026 20:34:53 +0200 Subject: [PATCH] Kill xmobars by name when restarting status bars killAllStatusBars only kills the PIDs xmonad has stored, and bars that dropped off that list kept running after M-q and movie, leaving a laptop-config bar on HDMI. pkill -x xmobar catches them all. --- .config/xmonad/xmonad.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.config/xmonad/xmonad.hs b/.config/xmonad/xmonad.hs index 49369db..14aacd3 100644 --- a/.config/xmonad/xmonad.hs +++ b/.config/xmonad/xmonad.hs @@ -26,6 +26,7 @@ import XMonad.Util.EZConfig import qualified XMonad.Util.Hacks as Hacks import XMonad.Util.Loggers import XMonad.Util.NamedScratchpad +import XMonad.Util.Run (runProcessWithInput) import XMonad.Util.SpawnOnce -- Main @@ -191,12 +192,13 @@ myStatusBar nScreens i = "xmobar -x " ++ show i ++ " ~/.config/xmobar/" ++ rc rc = if nScreens > 1 && i /= 1 then "xmobarrc_hdmi" else "xmobarrc_laptop" -- One bar per screen, all restarted on every screen change: the right config for a --- screen id depends on the screen count, and dynamicSBs would keep the old bar +-- screen id depends on the screen count, and dynamicSBs would keep the old bar. +-- Kills by name (pkill waits) because killAllStatusBars' PID list can lose bars. restartStatusBars :: X () restartStatusBars = do - killAllStatusBars + _ <- runProcessWithInput "pkill" ["-x", "xmobar"] "" screens <- gets (W.screens . windowset) - forM_ screens $ \s -> let S i = W.screen s in spawnStatusBar (myStatusBar (length screens) i) + forM_ screens $ \s -> let S i = W.screen s in spawn (myStatusBar (length screens) i) myXmobarPP :: PP myXmobarPP =