如何在 Linux 上自定义 i3status
I3 是 Linux 上最常用的平铺窗口管理器之一。平铺窗口管理器以不重叠的方式排列窗口:这使我们能够有效地使用屏幕空间,但可能需要一点时间来习惯。
Linux 上的 i3 窗口管理器通常与 i3status 实用程序一起安装,该实用程序可用于使用内存或 CPU 使用情况等信息填充支持的状态栏。在本教程中,我们将了解如何自定义 i3status 并使用它的一些模块。
在本教程中您将学习:
i3status 配置文件是什么
如何自定义 i3status
如何使用“磁盘”模块
如何使用“cpu_usage”模块
如何使用“以太网”和“无线”模块
如何使用“电池”模块
如何使用“内存”模块
使用的软件要求和约定
介绍
在本教程的过程中,我假设您已经安装了 i3 窗口管理器,并且 i3status 实用程序与 i3bar 一起运行,i3bar 是 i3 附带的默认状态栏。虽然 i3status 通常带有默认配置,但为了清楚起见,我们将从头开始,并使用教程中解释的说明填充它。
i3status 配置文件
要自定义 i3status,我们需要对其配置文件进行操作。按顺序检查以下文件是否存在:
〜/.config/i3status/config
/etc/xdg/i3status/config
〜/.i3status.conf
/etc/i3status.conf
我们还可以使用自定义文件:我们所要做的就是在调用 i3status 时将其路径作为参数传递给 -c
选项。在本教程中,我们将使用 ~/.config/i3status/config
文件来创建仅对特定用户有效的配置。为了使配置文件的更改生效,我们所要做的就是重新加载 i3 窗口管理器:我们通常可以通过“Mod+Shift+R”组合键来完成此操作。
“一般”部分
我们要在 i3status 配置文件中定义的第一件事是“常规”部分。在本节中,我们可以声明各种状态应使用什么颜色(如果有),以及 i3status 应多久更新一次打印到状态栏的信息。让我们看一个例子。在 ~/.config/i3status/config
文件中,我们编写:
general {
colors = true
color_good = "#a3be8c"
color_degraded = "#ebcb8b"
color_bad = "#bf616a"
interval = 1
separator = "|"
}
“常规”部分使用花括号分隔。在其中,我们声明要使用颜色(通过 colors=true
指令)并定义哪些颜色应与良好、降级和不良状态相关联。状态阈值可以在某些模块内部定义,并可用于突出显示例如无线连接不良或 CPU 使用率高等情况。颜色是使用 RGB 十六进制表示法定义的,就像我们在 css 文件中所做的那样。接下来,使用interval
指令,我们定义了i3status必须更新状态栏中的信息之后的时间间隔(以秒为单位)。最后,通过 separator
指令,我们定义了用作我们将要看到的各个模块打印的信息之间的分隔符的字符。
使用模块
i3status 实用程序提供了一系列模块,我们可以使用它们来检索一些有用的信息。我们将在本教程中讨论的内容是:
磁盘:用于打印文件系统的已用空间、可用空间和总空间
无线:显示有关无线网络接口连接的信息
以太网:显示有关以太网接口连接的信息
Battery:获取电池状态
CPU使用率:显示CPU使用率信息
内存:显示有关内存使用情况的信息
可以使用花括号中包含的适当指令来配置模块。让我们看一些例子。
磁盘模块
让我们从“磁盘”模块开始。正如我们已经说过的,该模块可用于显示给定文件系统的总空间、已用空间和可用空间的信息。假设我们要检查“/”文件系统中已用空间的百分比。我们可以这样写:
disk "/" {
format = "/: %percentage_used"
}
我们使用 format
指令定义如何在状态栏中打印状态。 %percentage_used
占位符将替换为已用空间的实际百分比。我们可以使用的另一个占位符,例如 %percentage_free
,它呈现为文件系统中可用空间的百分比(有关完整的占位符列表,请查看 i3status 手册)。配置模块后,为了使其内容包含在 i3status 的输出中,我们必须将其添加到顺序列表中的“常规部分”之后。此时的配置文件如下所示:
general {
colors = true
color_good = "#a3be8c"
color_bad = "#bf616a"
color_degraded = "#ebcb8b"
interval = 1
separator = "|"
}
order += "disk /"
disk "/" {
format = "/: %percentage_used"
}
我们重新加载i3后,i3bar中会显示信息:
cpu_usage模块
“cpu_usage”模块可用于通过 %usage
占位符以百分比格式显示 CPU 使用情况:
cpu_usage {
format = "Cpu: %usage"
}
正如我们之前提到的,可以定义降级和不良阈值:当百分比达到阈值时,将使用常规部分中定义的相应颜色进行打印。默认情况下,此阈值分别为 90
和 95
,但可以通过 degraded_threshold
和 max_threshold
指令更改。如果我们想要跟踪相对于特定 CPU 的百分比,我们可以使用 %cpu
cpu_usage {
format = "CPU_0: %cpu0 CPU_1: %cpu1 CPU_2: %cpu2 CPU_3: %cpu3"
degraded_threshold = 90
max_threshold = 95
}
要将模块的结果添加到 i3status 输出,我们将其添加到订单中:
order += "disk /"
order += "cpu_usage"
以下是状态变化的方式:
以太网和无线模块
通过“以太网”和“无线”模块,我们可以获得相应网络连接的信息。通过以太网模块,我们传递网络接口的名称,并让 i3status 打印分配给它的 IP 地址,以及链接速度(如果可用)。这是模块使用的示例:
ethernet enp0s31f6 {
format_up = "ETH: %ip (%speed)"
format_down = "ETH: down"
}
通过 format_up
指令,我们指定连接启动时必须显示的内容:%ip
占位符替换为分配给接口的 IP 地址,并且 % speed
与链接速度。相反,使用format_down
,我们可以设置连接断开时必须显示的内容。如果我们不想“硬编码”接口名称,我们可以使用 _first_
特殊值:当我们这样做时,将使用第一个非环回、非无线接口。
“无线”模块的工作原理类似。在本例中,我们指定无线接口的名称,或者再次使用_first_
,在本例中,它将被第一个无线网络接口的名称替换。除此之外,我们还可以检索有关连接的 %quality
、%ssid
和 %ip
的信息。这是模块使用的示例:
wireless __first__ {
format_up = "WLS: (%quality at %ssid) %ip"
format_down = "WLS: down"
}
以下是我们将“以太网”和“无线”模块添加到订单后状态栏的显示方式:
“电池”模块
“电池”模块可用于检索有关电池的信息,例如其状态和充电百分比。这些信息公开在 /sys/class/power_supply/BAT
文件中(n 是电池的数量,因为某些机器可能有多个电池)。假设我们想要显示电池的百分比,并在百分比为 10% 或更低时使用“color_bad”打印它,我们会这样写:
battery 0 {
format = "BAT0: %percentage"
last_full_capacity = true
threshold_type=percentage
low_threshold=10
}
我们在模块名称后面传递了电池编号,并使用格式指令来设置状态栏中应显示哪些信息。通过 last_full_capacity
指令,我们声明我们希望相对于电池的当前容量而不是设计的全部容量来计算百分比。接下来,我们使用 threshold_type
指令明确声明阈值应为百分比值,然后将 low_threshold 设置为 10。
如果我们的机器上有多个电池怎么办?电池从0开始逐渐编号,我们可以使用“path”指令显式设置“uevent”文件的路径:
battery 1 {
path=/sys/class/power_supply/%d/uevent
format = "BAT1: %percentage"
last_full_capacity = true
threshold_type=percentage
low_threshold=10
}
在模块配置中,第一个 %d
占位符被模块名称旁边传递的电池编号替换。如果我们想要获得所有现有电池的聚合,我们所要做的就是将电池编号替换为“all”:
battery all {
path=/sys/class/power_supply/%d/uevent
format = "BAT AGGR: %percentage"
last_full_capacity = true
threshold_type=percentage
low_threshold=10
}
这是将上述配置添加到 i3status 订单中的结果:
“记忆”模块
“内存”模块允许我们通过查询/proc/meminfo
来跟踪RAM的使用情况。我们可以通过使用相应的占位符使 i3status 显示总的、已用的、空闲的和可用的系统内存。有两种方法可用于计算可用/已用内存:“memeavailable”和“classical”。前者是总内存减去MemAvailable,对应free
命令返回的值;后者通过从总内存中减去缓冲区、高速缓存和“空闲”内存来计算可用内存,并对应于 gnome 系统监视器返回的值。要以百分比显示已用内存/总内存,我们可以编写:
memory {
memory_used_method = classical
format="Memory: %used/%total"
}
以下是将模块包含在 i3status 中的结果:
结论
在本文中,我们学习了如何自定义 i3status,这是 i3 窗口管理器附带的实用程序,可用于生成和打印状态栏(如 i3bar)中的信息。我们了解了如何配置它以及如何使用一些可用的模块。有关 i3status 功能的完整概述,请查看实用程序手册。