Si tiene un script de shell para iniciar XMobar, entonces está 'haciéndolo mal'. Debería iniciar xmobar utilizando las funciones correctas de Haskell en el archivo fuente de configuración xmonad.hs. Echa un vistazo a la función principal de mi configuración:
-- put it all together
main = do
nScreens <- countScreens -- just in case you are on a laptop like me count the screens so that you can go
xmonad =<< xmobar myBaseConfig
{ modMask = myModMask
, workspaces = withScreens nScreens myWorkspaces
, layoutHook = myLayoutHook nScreens
, manageHook = myManageHook
, borderWidth = myBorderWidth
, normalBorderColor = myNormalBorderColor
, focusedBorderColor = myFocusedBorderColor
, keys = myKeys
, mouseBindings = myMouseBindings
, logHook = myLogHook
}
where
myLogHook = dynamicLogXinerama
myBaseConfig = gnomeConfig
La línea más destacada es esta:
xmonad =<< xmobar myBaseConfig
Eso ejecuta xmobar como debería ejecutarse, incluso cuando recarga xmonad. Obtiene la función 'xmobar' de la declaración:
import XMonad.Hooks.DynamicLog (xmobar)
Que a su vez proviene del paquete xmonad-contrib .
Como puede ver, la mayoría de las cosas que desea hacer con XMonad ya son un problema resuelto, solo tiene que saber dónde buscar. Básicamente, solo abandona tu script y úsalo en su lugar. Espero que esto ayude.
spawnPipe
código en el sitio web de XMonad, ¡realmente no es fácil saber dónde buscar! Pero al final, prefiero la técnica que estoy usando, ya que es más limpia, el usoDynamicLog
no eliminó el proceso anterior en mis pruebas. Realmente me gusta XMonad, pero Haskell no es un buen lenguaje de configuración.spawnPipe
bifurcará un proceso en un nuevo hilo. Si deseaspawnPipe
crear un proceso secundario en su lugar (uno que se cierra cuando lo hace el proceso principal), me temo que tendrá que escribir su propiaspawnPipe
función.