Чистый респавн xmobar при перезагрузке xmonad

Чистый респавн xmobar при перезагрузке xmonad

Это всего лишь небольшая неприятность, но я заставил файл конфигурации XMonad загружать xmobar с помощью этого кода:

xmproc <- spawnPipe "/use/bin/xmobar ~/.xmobarrc"

Работает хорошо, но каждый раз при перезагрузке XMonad порождает новый процесс xmobar. Интересно, есть ли простой способ убить старый?

обновлять: Как и предложил entropo, я создал такой скрипт bash:

#!/bin/bash

for PID in `pgrep xmobar`; do
    kill ${PID} > /dev/null &
done

/usr/bin/xmobar &

и вызовите этот скрипт из файла конфигурации XMonad.

решение1

Не относится к xmonad, но вы можете запустить xmobar через скрипт оболочки, который проверяет наличие существующего процесса xmobar. См., например,http://bash.cyberciti.biz/web-server/restart-apache2-httpd-shell-script/

решение2

Если у вас есть скрипт оболочки для запуска XMobar, то вы 'делаете это неправильно'. Вы должны запускать xmobar, используя правильные функции Haskell в исходном файле конфигурации xmonad.hs. Взгляните на мою функцию main в конфигах:

-- 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

Вот эта примечательная строка:

xmonad =<< xmobar myBaseConfig

Это запускает xmobar так, как он должен запускаться, даже когда вы перезагружаете xmonad. Вы получаете функцию 'xmobar' из оператора:

import XMonad.Hooks.DynamicLog (xmobar)

Что в свою очередь исходит изxmonad-contrib пакет.

Итак, вы видите, большинство вещей, которые вы хотите сделать с XMonad, уже решены, вам просто нужно знать, где искать. По сути, просто выбросьте свой скрипт и используйте его вместо этого. Надеюсь, это поможет.

Связанный контент