跳转至内容

xmobar

来自 ArchWiki

xmobar 是一个用 Haskell 编写的轻量级文本状态栏。它最初旨在与 xmonad 配合使用,但也可以用于任何其他 窗口管理器。虽然 xmobar 是用 Haskell 编写的,但安装和使用它不需要具备该语言的知识。

安装

安装 xmobar 软件包。

运行

如果配置文件保存为 ~/.xmobarrc

$ xmobar &

或者,也可以指定配置文件的路径

$ xmobar /path/to/config &

以下是如何使用命令行选项配置 xmobar 的示例

$ xmobar -B white -a right -F blue -t '%LIPB%' -c '[Run Weather "LIPB" [] 36000]' &

这将运行 xmobar,设置为右对齐,白色背景和蓝色文字,并使用 Weather 插件。请注意,输出模板必须包含至少一个命令。阅读以下章节以进一步了解选项的说明。

标志 -x number 可以指定运行 xmobar 的 x 显示屏,它将有效地覆盖配置选项 pickBroadestallDesktops

配置

xmobar 的配置通常定义在 ~/.xmobarrc 中,或者在启动 xmobar 时通过指定一组命令行选项来定义。任何给定的命令行选项都将覆盖配置文件中的相应选项。这在无需编辑配置文件即可测试新配置时非常有用。

以下是一个 ~/.xmobarrc 文件示例,随后是对每个选项的描述。请注意,每个选项都有一个对应的命令行选项。

注意:配置文件是 Haskell 源代码(的一个子集),因此 “--” 表示单行注释。

Config { 

   -- appearance
     font =         "Bitstream Vera Sans Mono Bold 9"
   , bgColor =      "black"
   , fgColor =      "#646464"
   , position =     Top
   , border =       BottomB
   , borderColor =  "#646464"

   -- layout
   , sepChar =  "%"   -- delineator between plugin names and straight text
   , alignSep = "}{"  -- separator between left-right alignment
   , template = "%battery% | %multicpu% | %coretemp% | %memory% | %dynnetwork% }{ %RJTT% | %date% || %kbd% "

   -- general behavior
   , lowerOnStart =     True    -- send to bottom of window stack on start
   , hideOnStart =      False   -- start with window unmapped (hidden)
   , allDesktops =      True    -- show on all desktops
   , overrideRedirect = True    -- set the Override Redirect flag (Xlib)
   , pickBroadest =     False   -- choose widest display (multi-monitor)
   , persistent =       True    -- enable/disable hiding (True = disabled)

   -- plugins
   --   Numbers can be automatically colored according to their value. xmobar
   --   decides color based on a three-tier/two-cutoff system, controlled by
   --   command options:
   --     --Low sets the low cutoff
   --     --High sets the high cutoff
   --
   --     --low sets the color below --Low cutoff
   --     --normal sets the color between --Low and --High cutoffs
   --     --High sets the color above --High cutoff
   --
   --   The --template option controls how the plugin is displayed. Text
   --   color can be set by enclosing in <fc></fc> tags. For more details
   --   see http://projects.haskell.org/xmobar/#system-monitor-plugins.
   , commands = 

        -- weather monitor
        [ Run Weather "RJTT" [ "--template", "<skyCondition> | <fc=#4682B4><tempC></fc>°C | <fc=#4682B4><rh></fc>% | <fc=#4682B4><pressure></fc>hPa"
                             ] 36000

        -- network activity monitor (dynamic interface resolution)
        , Run DynNetwork     [ "--template" , "<dev>: <tx>kB/s|<rx>kB/s"
                             , "--Low"      , "1000"       -- units: B/s
                             , "--High"     , "5000"       -- units: B/s
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 10

        -- cpu activity monitor
        , Run MultiCpu       [ "--template" , "Cpu: <total0>%|<total1>%"
                             , "--Low"      , "50"         -- units: %
                             , "--High"     , "85"         -- units: %
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 10

        -- cpu core temperature monitor
        , Run CoreTemp       [ "--template" , "Temp: <core0>°C|<core1>°C"
                             , "--Low"      , "70"        -- units: °C
                             , "--High"     , "80"        -- units: °C
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 50
                          
        -- memory usage monitor
        , Run Memory         [ "--template" ,"Mem: <usedratio>%"
                             , "--Low"      , "20"        -- units: %
                             , "--High"     , "90"        -- units: %
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 10

        -- battery monitor
        , Run Battery        [ "--template" , "Batt: <acstatus>"
                             , "--Low"      , "10"        -- units: %
                             , "--High"     , "80"        -- units: %
                             , "--low"      , "darkred"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkgreen"

                             , "--" -- battery specific options
                                       -- discharging status
                                       , "-o"	, "<left>% (<timeleft>)"
                                       -- AC "on" status
                                       , "-O"	, "<fc=#dAA520>Charging</fc>"
                                       -- charged status
                                       , "-i"	, "<fc=#006000>Charged</fc>"
                             ] 50

        -- time and date indicator 
        --   (%F = y-m-d date, %a = day of week, %T = h:m:s time)
        , Run Date           "<fc=#ABABAB>%F (%a) %T</fc>" "date" 10

        -- keyboard layout indicator
        , Run Kbd            [ ("us(dvorak)" , "<fc=#00008B>DV</fc>")
                             , ("us"         , "<fc=#8B0000>US</fc>")
                             ]
        ]
   }
  • font - 要使用的字体名称。

示例

font = "Bitstream Vera Sans Mono 8"
  • additionalFonts - 与 <fn=n> 标签一起使用的字体列表。

示例

additionalFonts = [ "Bitstream Vera Sans Mono 8", "Source Code Pro 10"]
  • fgColor - 字体颜色,支持颜色名称(如 black)和十六进制颜色(如 #000000)。
  • bgColor - 状态栏颜色,支持颜色名称(如 red)和十六进制颜色(如 #ff0000)。
  • position - 状态栏的位置。关键字有:Top/Bottom, TopW/BottomW, StaticOnScreen
    • Top/Bottom - 屏幕的顶部/底部。
    • TopW/BottomW - 固定宽度的屏幕顶部/底部。TopW/BottomW 接收 2 个参数
      • 对齐方式:Left(左对齐)、Center(居中)或 Right(右对齐)。
      • 宽度:状态栏宽度的百分比整数值。
    • Static - 屏幕上的固定位置,且宽度固定。Static 接收 4 个参数
      • xpos:水平位置(像素),从左上角开始。
      • ypos:垂直位置(像素),从左上角开始。
      • width:状态栏宽度(像素)。
      • height:状态栏高度(像素)。
    • OnScreen - 指定状态栏所在屏幕。接收 2 个参数
      • screenNr:要放置状态栏的屏幕索引。
      • position:状态栏的定位方式,这是上述关键字之一及其随后的参数。

示例 - 位于屏幕底部居中,宽度为屏幕的 75%

position = BottomW C 75

示例 - 位于屏幕左上角,宽度为 1024 像素,高度为 15 像素

position = Static { xpos = 0 , ypos = 0, width = 1024, height = 15 }
  • border - 边框的位置和外观。关键字有:TopB, TopBM, BottomB, BottomBM, FullB, FullBMNoBorder (默认)
    • TopB/BottomB - 状态栏的顶部/底部
    • FullB - 状态栏的整个周长
    • TopBM/BottomBM/FullBM - 与其他选项相同,但您可以指定边框距离状态栏边缘多少像素。每个选项接收一个整数参数。

示例 - 边框距离状态栏底边 3 像素

border: BottomBM 3
  • sepChar - 用于在输出模板中指示命令的字符。默认字符为 "%"
  • alignSep - 用于在输出模板中对齐文本的字符字符串。第一个字符之前的文本将左对齐,两个字符之间的文本将居中,最后一个字符右侧的文本将右对齐。默认字符串为 "}{"
  • iconRoot - 存储图标的根文件夹。
  • template - 输出模板是一个包含将要显示的文本和命令的字符串。它包含 %command% 的别名、普通文本以及设置文本颜色的颜色标签。此模板字符串中使用的标签也可以用于 Run command 自定义模板。模板标签包括:
    • %command% 打印命令的输出
    • <fc=#f0f0f0,#101010>string</fc> 将打印 string,前景色为 #f0f0f0,背景色为 #101010(两者均可省略)
    • <fn=1>string</fn> 将使用 additionalFonts 列表中的第 n 个字体(本例中为第一个)打印 string,0 为默认字体。
    • <icon=/path/to/icon.xbm/> 将打印该路径下的 XBM 或 XPM 图标(如果路径不以 /, ./ 或 ../ 开头,则使用 iconRoot ++ 路径)。透明的 XPM 图标将忽略 fc 标签并使用默认的 bgcolor,而 XBM 图标将使用局部(或默认)的背景色和前景色。xmobar 将使用任何尺寸的图标,但为了与文本的 bgcolorfgcolor 对齐,最佳高度为 20px,没有宽度限制。
    • <action=`command` button=1>string</action> 当使用按钮 1(鼠标左键)点击 string 时将执行命令。
    • <raw=len:string/> 输出一个长度为 len 的任意字符串。

示例

template = "%StdinReader%}{%cpu% %memory% <fc=#ffaaff>battery:</fc> %battery% %date%"
  • commands 用于设置要运行程序的选项。Commands 是一个以逗号分隔的命令列表,可选地指定选项。

示例 - 运行 Memory 插件(使用指定模板)和 Swap 插件(使用默认参数)。两者每秒更新一次

commands = [Run Memory ["-t","Mem: <usedratio>%"] 10, Run Swap [] 10]

最后是一些控制状态栏通用行为的选项——每个选项设置为单个 TrueFalse

  • lowerOnStart - 控制是否将状态栏保持在所有其他窗口之后。
  • hideOnStart - 控制启动时是否隐藏状态栏。
  • allDesktops - 控制是否在所有桌面显示状态栏。
  • overrideRedirect - 某些窗口管理器必需的选项,以防止状态栏被当作普通窗口处理。
  • pickBroadest - 在多显示器设置中,将状态栏放置在最宽的显示器上而非第一个显示器。
  • persistent - 控制无论状态栏的“隐藏”状态如何,是否始终可见。

技巧与提示

有各种可与 xmobar 配合使用的插件——例如,有用于磁盘使用情况、内存、CPU、电池状态、天气报告和网络活动的插件。关于每个插件的详细描述、依赖项及其配置方法,请参阅项目 网站

GMail 集成

假设您已经安装了 xmobar-gmail-darcsxmobar-gmail,您可以按如下方式配置 .xmobarrc。将 GMail 插件添加到命令列表中

, Run GMail "gmail.username" "GmailPassword" ["-t", "Mail: <count>"] 3000

然后将命令添加到模板中

, template = "... %gmail.username% ..."

MPD 集成

有一个插件可以提取关于 MPD 当前播放歌曲的信息并显示在状态栏上。要添加一个显示当前曲目艺术家和歌曲名称的简单插件,请将此行添加到 ~/.xmobarrc 的命令列表中

, Run MPD ["-t", "<state>: <artist> - <track>"] 10

最后,您需要在模板中的某个位置放置该插件,如下所示

, template = "%StdinReader% }{ ... %mpd% ..."

Conky-Cli 集成

可以通过将 conky 的信息管道传输到文本文件并从中读取内容,来利用 conky-cliAUR 的功能(如磁盘空间、top 和系统消息)。以下是为此目的与 xmobar 配合使用的 bash 脚本。

~/.xmonad/conkyscript
#!/bin/bash
conky -c ~/.conkyclirc -i1 -q > conkystat &
sleep 4
killall -q conky
cat conkystat
rm conkystat

将以下行添加到 ~/.xmobarrc 的 commands 部分。

, Run Com ".xmonad/conkyscript" ["&"] "conky" 300

这将使脚本每 30 秒运行一次。

然后将以下内容添加到 .xinitrcexec xmonad 条目之前。

.xmonad/conkyscript &
sleep 6 && xmobar &

然后将 %conky% 添加到您的模板部分。

简单的 conky-cli 集成

只需将此代码放置

Run Com "conky" ["-q", "-i", "1"] "conky" 600

在您的 .xmobarrc 中。

故障排除

xmonad 除焦点窗口外无响应

如果 xmonad 对点击和热键没有响应,但您仍然可以在焦点窗口中输入,这很可能是由于 logHook 将信息传输到了一个未被读取的句柄。

要解决此问题,请在 xmobar 的模板中添加 %StdinReader%%UnsafeStdinReader%,并在命令部分运行相应的命令(即 Run StdinReader)。在有多个 xmobar 实例的情况下,请检查所有您传输信息的状态栏都具有 StdinReader,如果没有,请添加它或将该状态栏从 logHook 的 ppOutput 中移除。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.