
Это всего лишь небольшая неприятность, но я заставил файл конфигурации 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, уже решены, вам просто нужно знать, где искать. По сути, просто выбросьте свой скрипт и используйте его вместо этого. Надеюсь, это поможет.