如何在 Linux 上安装、配置和自定义 Waybar
Waybar 是一个高度可定制的 Wayland 栏,适用于 Sway 和其他基于 Wlroots 的合成器,例如 Hyprland 或 River。 Waybar 的许多可用功能都组织在模块中,可以轻松配置和设计样式。
在本教程中,我们学习如何在一些最常用的 Linux 发行版上安装和配置 Waybar。
在本教程中您将学习:
- 如何安装Waybar
- 如何配置 Waybar 和一些最有用的模块并设置样式
安装
Waybar 是免费的开源软件;该代码可在 GitHub 上找到,但所有主要的 Linux 发行版都在其官方存储库中包含该 bar 的预编译版本,可供安装。要在最新的 Debian 稳定版 (Bookworm) 和其他基于 Debian 的发行版上安装 Waybar,我们可以运行:
$ sudo apt install waybar
相反,在 Fedora 上,我们可以使用 dnf 安装“waybar”包:
$ sudo dnf install waybar
Waybar 也可以在 Archlinux“Extra”存储库中找到。我们可以使用 pacman 安装它:
$ sudo pacman -Sy waybar
路栏配置
Waybar 使用 JSONC(带注释的 JSON)文件格式进行配置,并按优先级顺序在以下位置查找配置文件:
- $XDG_CONFIG_HOME/waybar/config
- 〜/.config/waybar/config
- 〜/.waybar/config
- /etc/xdg/waybar/config
在开始讨论模块以及如何配置它们之前,我们想要编写“通用”Waybar 配置。这是一个例子:
{
"layer": "bottom",
"position": "top",
"height": 24,
"spacing": 5,
"modules-left": ["sway/workspaces","sway/mode"],
"modules-center": ["sway/window"],
"modules-right": ["idle_inhibitor","cpu","memory","battery","pulseaudio","clock","tray"]
}
通过使用layer
键,我们指定该栏是否应显示在其他窗口的顶部或后面。在平铺窗口管理器环境中,当使用“dmenu”等实用程序时,这变得相关,以确保菜单窗口可见(如果在调用时它出现在栏的相同位置)。有效值为“顶部”和“底部”,这是默认值。使用 position
键,我们声明该栏应放置在屏幕的哪一侧。有效选项有:“上”、“下”、“左”、“右”。
height
和 spacing
键都采用整数值,分别指定栏的高度和模块之间的空间量。最后,modules_left
、modules_center
和 modules_right
键让我们指定要在栏的相应部分中使用的模块。这些键中的每一个都接受一组模块名称作为值。
路栏模块
Waybar 附带了大量可供选择的模块。尽管不可能在本教程中看到所有这些内容,但我们至少看一下上面配置中包含的内容。
“摇摆/工作空间”模块
sway/workspaces 模块显示 Sway 窗口管理器中当前使用的工作区。默认情况下,仅显示工作区编号;但是,可以使用 format
键和可用的占位符来更改此设置。其中:
- {value}:替换为 sway 配置中定义的整个工作区的名称
- {name}:如果工作区名称以“
: ”格式指定,则替换为列右侧的值。例如,如果工作区名称为“1:TERMINAL”,则模块将显示:“TERMINAL” - {output}:替换为工作区所在的输出(例如 HDMI-A-2)
“摇摆/模式”模块
sway/mode 模块用于显示当前 Sway WM 模式(例如模式“resize”)。默认只是显示模式名称,对应如下配置:
"sway/mode": {
"format": "{}"
},
“摇摆/窗口”模块
sway/window 模块显示当前聚焦窗口的标题。默认配置通过使用“{title}”占位符作为 format
键的值来确保仅显示窗口的标题:
"sway/window": {
"format": "{title}"
}
其他可用的占位符是“{app_id}”,它被焦点应用程序的 ID 替换(例如:org.kde.ghostwriter),以及“{shell}”,它被焦点窗口的 shell 替换:“xwayland” Windows 使用 xwayland 或“xdg-shell”作为本机 Wayland 应用程序。
“空闲抑制器”模块
空闲抑制器模块可用于激活所谓的“演示模式”,其中涉及暂停屏幕消隐和锁定等节能活动。单击 Waybar 中显示的模块可切换演示模式状态。这是一个配置示例:
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\uf06e",
"deactivated": "\uf070"
}
}
有两个占位符可以用作format
的值:“{status}”,它被替换为表示空闲抑制器状态的字符串(“actived”与“deactivated”),以及“{icon}”,它被 format-icons
对象中定义的相应图标替换。
Font-awesome 字体提供了一系列非常漂亮的 unicode 图标,可以在 Waybar 中使用。这些字体通常打包在最常用的发行版的存储库中。例如,在 Debian 及其衍生版本上,该软件包称为“fonts-font-awesome”;在 Fedora 上,字体位于“fontawesome-fonts”包中,在 ArchLinux 上,它们被打包为“otf-font-awesome”。
在本教程的过程中,我们使用其 unicode 转义序列来表示图标,以确保您能够正确地可视化它们。但是,在您的配置中,您只需复制并粘贴相应的字符即可。
“CPU”模块
cpu 模块对于监视 CPU 利用率很有用。默认情况下,报告的数据每 10 秒更新一次,并且使用情况以百分比形式显示。这是通过 format
键使用“{usage}”占位符定义的:
"cpu": {
"interval": 10,
"format": "CPU: {usage}%"
},
我们可以使用的其他一些占位符是:
- {load}:替换为当前CPU负载
- {avg_Frequency}:替换为所有核心的当前 CPU 平均频率(以 GHz 为单位)
- {min_Frequency}:替换为最小最低核心频率(以 GHz 为单位)
- {max_Frequency}:替换为最高频率核心的当前最大频率(GHz)
“记忆”模块
内存模块显示 RAM 和交换区使用情况。默认情况下,仅使用“{percentage}”占位符以百分比格式显示前者的状态。状态每 30 秒更新一次:
"memory": {
"interval": 30,
"format": "{percentage}%"
},
通过使用其他一些可用的占位符,我们可以显示总可用内存量和交换使用情况。这是一个例子:
"memory": {
"interval": 30,
"format": "RAM: {used:0.1f}GiB/{total:0.1f}GiB ({percentage}%) SWAP: {swapUsed:0.1f}GiB/{swapTotal:0.1f}GiB ({swapPercentage}%)"
},
“{used}”占位符扩展为以 GiB 表示的已用内存量,而“{total}”则替换为总可用内存。 “{swapUsed}”和“{swapTotal}”占位符对于交换具有相同的作用。在占位符内,我们指定了格式化样式:“0.1f”格式化输出,以便仅显示单个十进制值,以提高可读性。
“电池”模块
电池模块显示当前可用的电池电量及其状态。以下是其配置示例:
"battery": {
"bat": "BAT0",
"states": {
"good": 95,
"warning": 30,
"critical": 5
},
"format": "BAT0: {capacity}%",
"format-charging": "BAT0: {capacity}% (charging)",
"format-plugged": "BAT0: {capacity}% (plugged)",
},
bat
键用于指定模块应使用 /sys/proc/power_supply
中可用的电池监视器。如果此选项留空,则自动检测该值;如果您的机器有多个电池,您可能需要指定它。 states
键采用 JSON 对象作为值;其中的每个键值对代表一个状态和对应的费用百分比阈值。
我们可以使用 format-charging
、format-plugged
和 format
键来定义电池充电时、交流电关闭时数据的格式化方式适配器已插入(插入适配器并不一定意味着电池正在充电:请参阅充电阈值),以及所有其他情况。
“时钟”模块
我们可以使用时钟模块来显示当前的日期和时间。默认情况下,输出中仅包含时间:
"clock": {
"format": "{:%H:%M}"
},
要显示当前日期,我们可以使用以下配置:
"clock": {
"format": "{:%Y/%m/%d %H:%M}",
},
要将小日历显示为工具提示,我们可以使用 tooltip-format
键,并为其指定以下值:
"clock": {
"format": "{:%Y/%m/%d %H:%M}",
"tooltip-format": "<tt><small>{calendar}</tt>",
},
可以使用calendar
对象进一步自定义日历的样式。例如,要将月份名称涂成黄色,当前日期涂成红色,我们可以这样写:
"clock": {
"format": "{:%Y/%m/%d %H:%M}",
"tooltip-format": "<tt><small>{calendar}</tt>",
"calendar": {
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"today": "<span color='#ff6699'><b>{}</b></span>"
}
}
},
您几乎可以根据需要配置日历。模块的 GitHub 页面上显示了一些配置示例。
“pulseaudio”模块
脉冲音频模块报告有关当前脉冲音频音量的信息。默认配置仅显示音量百分比:
"pulseaudio": {
"format": "{volume}%"
}
为了让事情看起来更好,我们可以在百分比值旁边显示一个图标。我们可以使用 format-icons
键根据音量级别(从低到高)定义要使用的图标:
"pulseaudio": {
"format": "{volume}% {icon}",
"format-icons": {
"default": ["\uf026", "\uf027", "\uf028"]
}
},
通过在 Waybar 中的“pulseaudio”模块上滚动鼠标滚轮,可以提高和降低音量。如果有一种快速将音频完全静音的方法也很好。我们可以做到这一点,但指定一个“pactl”命令(pactl是一个控制Puseaudio服务器的实用程序),当“on-click”、“on-click-right”或“on-middle-click”事件之一发生时已注册。在下面的示例中,我们单击鼠标左键将音频静音,然后单击右键启动 pavucontrol:
"pulseaudio": {
"format": "{volume}% {icon}",
"format-muted": " {volume}%",
"format-icons": {
"default": ["\uf026", "\uf027", "\uf028"]
},
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
"on-click-right": "pavucontrol"
},
最后,我们可能想要指定音频静音时要使用的格式。我们可以使用format-muted
键来做到这一点:
"pulseaudio": {
"format": "{icon} {volume}%",
"format-icons": {
"default": ["\uf026", "\uf027", "\uf028"]
},
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
"on-click-right": "pavucontrol",
"format-muted": "\uf00d {volume}%"
},
“托盘”模块
托盘栏是传统桌面体验的基本组成部分。有些应用程序被设计为在关闭时最小化在托盘中,如果没有它,就不可能获取它们的状态。 Waybar 通过“托盘”模块支持托盘功能。
我们可以在托盘模块配置中使用的一些键是:icons-size
,它设置托盘中图标的大小,以及spacing
,它定义空间图标之间。两个键均采用整数作为值。以下是典型的托盘配置:
"tray": {
"icon-size": 20,
"spacing": 10
}
把它们放在一起
当我们将所有元素放在一起时,完整的配置如下所示:
{
"layer": "bottom",
"position": "top",
"height": 24,
"spacing": 5,
"modules-left": ["sway/workspaces","sway/mode"],
"modules-center": ["sway/window"],
"modules-right": ["idle_inhibitor","cpu","memory","battery","pulseaudio","clock","tray"],
"sway/mode": {
"format": "{}"
},
"sway/window": {
"format": "{title}"
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\uf06e",
"deactivated": "\uf070"
}
},
"cpu": {
"interval": 10,
"format": "CPU: {usage}%"
},
"memory": {
"interval": 30,
"format": "RAM: {used:0.1f}GiB/{total:0.1f}GiB ({percentage}%) SWAP: {swapUsed:0.1f}GiB/{swapTotal:0.1f}GiB ({swapPercentage}%)"
},
"battery": {
"bat": "BAT0",
"states": {
"good": 95,
"warning": 30,
"critical": 5
},
"format": "BAT0: {capacity}%",
"format-charging": "BAT0: {capacity}% (charging)",
"format-plugged": "BAT0: {capacity}% (plugged)",
},
"clock": {
"format": "{:%Y/%m/%d %H:%M}",
"tooltip-format": "<tt><small>{calendar}</tt>",
"calendar": {
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"today": "<span color='#ff6699'><b>{}</b></span>"
}
}
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-icons": {
"default": ["\uf026", "\uf027", "\uf028"]
},
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
"on-click-right": "pavucontrol",
"format-muted": "\uf00d {volume}%"
},
"tray": {
"icon-size": 20,
"spacing": 10
},
}
样式栏
我们可以使用以下 css 文件之一自定义 Waybar 的外观:
- 〜/.config/waybar/style.css
- 〜/waybar/style.css
- /etc/xdg/waybar/style.css
我们可以使用选择器来引用栏的各种元素。让我们看一些例子。假设我们要设置waybar背景和文字颜色;我们将通过 ID 引用该栏:
#waybar {
background-color: #333333;
color: #ffffff;
}
在另一个示例中,当演示模式处于活动状态时,我们定义“idle_inhibitor”模块的背景颜色(请参阅“.activated”类):
#idle_inhibitor.activated {
background-color: #285577;
}
要全局设置字体系列及其大小,请改为:
*{
font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
font-size: 13px;
}
非常简单直观。模块的所有有效 CSS 类都列在模块页面上。举个例子,这是我当前应用的样式:
* {
font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
font-size: 13px;
}
#waybar {
background-color: #333333;
color: #ffffff;
}
button {
box-shadow: inset 0 -3px transparent;
border: none;
border-radius: 0;
padding: 0 5px;
}
#workspaces button {
background-color: #5f676a;
color: #ffffff;
}
#workspaces button:hover {
background: rgba(0,0,0,0.2);
}
#workspaces button.focused {
background-color: #285577;
}
#workspaces button.urgent {
background-color: #900000;
}
#workspaces button.active {
background-color: #285577;
}
#clock,
#battery,
#cpu,
#memory,
#pulseaudio,
#tray,
#mode,
#idle_inhibitor,
#window,
#workspaces {
margin: 0 5px;
}
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
.modules-right > widget:last-child > #workspaces {
margin-right: 0;
}
@keyframes blink {
to {
background-color: #ffffff;
color: #000000;
}
}
#battery.critical:not(.charging) {
background-color: #f53c3c;
color: #ffffff;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
label:focus {
background-color: #000000;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: #eb4d4b;
}
#idle_inhibitor {
font-size: 15px;
background-color: #333333;
padding: 5px;
}
#idle_inhibitor.activated {
background-color: #285577;
}
这是生成的 Waybar 的样子。没什么太奇特的,确实很丑,但希望它能给你一个总体的想法。定制的限制几乎是你的创造力:
结论
在本教程中,我们了解了如何在 Linux 上安装、配置和自定义 Waybar。 Waybar 是一个非常强大的 Wayland 栏,适用于 Sway 等基于 Wlroots 的合成器。我们了解了如何创建一个简单的配置文件、如何使用 Waybar 中集成的一些模块,以及最后如何使用 CSS 样式表设置栏的样式。如果您是第一次使用 Waybar,为了避免从头开始配置,您可以将安装为 /etc/xdg/waybar/config 的系统范围配置文件复制到 ~/.config/waybar 下,并将其用作一个起点。