在多个显示器上使用 Xmobar

Use Xmobar on several Monitors

这个问题已经回答了好几次,但我不明白接受的答案。例如这里 。在问题中,用户提到了另一个问题,其中解决方案隐藏在评论后面。但是这个线程中接受的答案仍然隐藏了评论背后的代码。谁能post出一个xmonad.hs解决问题并且可以编译的?

我也在这里问过这个问题https://www.reddit.com/r/xmonad/comments/lowbw1/same_xmobar_on_several_screens/但是得到的答案是不可能的。但是如上所述,似乎有一个解决方案,因为已经接受了答案。

如果您使用 Xmonad 作为 window 管理器,您可以通过这种方式在 xmonad.hs 中生成 xmobar,将 XMonad.Util.Run 导入 运行 'spawnPipe'

main = do
     -- Launching three instances of xmobar on their monitors.
     xmproc0 <- spawnPipe "xmobar -x 0 $HOME/.config/xmobar/xmobarrc0"
     xmproc1 <- spawnPipe "xmobar -x 1 $HOME/.config/xmobar/xmobarrc2"
     xmproc2 <- spawnPipe "xmobar -x 2 $HOME/.config/xmobar/xmobarrc1"

如果你愿意,它可以是相同的 xmobarrc。

有了这个,您可以将参数从 Xmonad 传递到 xmobar,例如您的工作区、布局等,在您的 def 配置中定义

xmonad $ def {
      keys = myKeys
    , otherHooks...
    , logHook = myLogHook <+> dynamicLogWithPP xmobarPP
                    { ppOutput = \x -> hPutStrLn xmproc0 x  >> hPutStrLn xmproc1 x  >> hPutStrLn xmproc2 x
    , ppFormats
    }
} 

对于 ppFormats 检查 XMonad.Hooks.DynamicLog

而且,如果您不使用 Xmonad,可能会在您的启动文件中定义 .xinitrc 或您使用的文件添加

exec 'xmobar -x 0 /path/to/config' &
exec 'xmobar -x 1 /path/to/config' &
exec ...

可以正常工作,但是我不能告诉你如何将你的信息 windows 传递给 xmobar。

我找到了这段代码 here,在那里你可以找到一个非常长的 xmonad 配置来记录笔记和想法,还有一些 xmobar 配置。

希望这对您有所帮助