Если у вас есть сценарий оболочки для запуска XMobar, то вы «делаете это неправильно». Вы должны запустить xmobar, используя правильные функции Haskell в исходном файле конфигурации xmonad.hs. Взгляните на основные функции моих конфигов:
-- 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, уже решены, вам просто нужно знать, где искать. По сути, просто бросьте свой сценарий и используйте его вместо этого. Надеюсь, это поможет.
spawnPipe
код на веб-сайте XMonad, это действительно нелегко узнать, где искать! Но, в конце концов, я предпочитаю технику, которую я использую, поскольку она чище, использованиеDynamicLog
не убило старый процесс в моих тестах. Мне действительно нравится XMonad, но Haskell не является хорошим языком конфигурации.spawnPipe
создадите процесс в новом потоке. Если вы хотитеspawnPipe
вместо этого создать дочерний процесс (тот, который закрывается, когда основной процесс это делает), я боюсь, что вам придется написать свою собственнуюspawnPipe
функцию.