大家好!我是大聪明-PLUS!
我们都知道电池寿命有限。没关系------你可以去服务中心更换旧电池,然后继续使用设备。但查看当前的电池健康状况也很有用。这是 macOS 的标准功能,我们当然也可以在 Linux 中实现。让我们一起来看看吧!
首先,我们将找出合适的值,然后创建一个简洁美观的导航栏模块。
计算电池衰减值
首先,让我们列出所有电源设备:
`upower `-e
然后我们从列表中找到电池:
`upower `-e` | `grep` BAT
`# For example:`
`# /org/freedesktop/UPower/devices/battery_BATT
然后我们将获得有关该设备的详细信息:
`upower `-i` `$(upower -e | grep BAT)
我们将得到类似这样的结果:
` native-path: BATT
vendor: DESAY
model: BASE-BAT
serial: 1
power supply: yes
updated: Fri Jul 11 11:37:00 2025 (7 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: charging
warning-level: none
energy: 25.514 Wh
energy-empty: 0 Wh
energy-full: 47.5052 Wh
energy-full-design: 59.4247 Wh
energy-rate: 11.1573 W
voltage: 11.972 V
charge-cycles: 650
time to full: 2.0 hours
percentage: 53%
capacity: 79.9417%
technology: lithium-ion
charge-start-threshold: 75%
charge-end-threshold: 80%
charge-threshold-supported: yes
icon-name: 'battery-good-charging-symbolic'
History (charge):
1752222927 53.000 charging
History (rate):
1752223020 11.157 charging
1752222990 11.123 charging
1752222987 11.192 charging
1752222957 10.822 charging
1752222927 10.857 charging`
这里有很多有趣的信息,例如充电循环次数、充满电所需时间等等。目前,我们只关注两个参数:
-
energy-full-design--- 电池的初始满容量 -
energy-full--- 当前电池容量
这些参数之间的差异体现为电池衰减:
现在我们来把这个指标计算成百分比。
首先,我们来找出这些参数并将它们分开:
`upower `-i` `$(upower -e | grep BAT)` | `awk` `'\`
` /energy-full:/ {ef=$2}\`
` /energy-full-design:/ {efd=$2}\`
` END {print ef/efd}'
然后我们计算百分比值:
echo` `"(1 - $(upower -i $(upower -e | grep BAT) | awk '\`
` /energy-full:/ {ef=$2}\`
` /energy-full-design:/ {efd=$2}\`
` END {print ef/efd}')) * 100 + 0.5"` \
| bc
`# Output example:`
`# 20.558200
最后一步我们需要对数值进行四舍五入:
echo` `"(1 - $(upower -i $(upower -e | grep BAT) | awk '\`
` /energy-full:/ {ef=$2}\`
` /energy-full-design:/ {efd=$2}\`
` END {print ef/efd}')) * 100 + 0.5"` \
| bc \
| `cut` `-d'.'` `-f1`
`# Output example:`
`# 20
路标模块
在我的导航栏配置中,~/.config/waybar/config.json我在右侧部分添加了两个模块,但你可以根据自己的喜好进行调整。这是我最终的配置:
让我们来看看:
`{
`...`
`"modules-left"`: [`...`],
`"modules-center"`: [`...`],
"modules-right": [
`"battery"`,
`"custom/battery-degradation"`,
`...`
],
`...
第一个模块是标准模块battery;它在 Hyprland 上运行良好。在这里,我们定义了良好、警告和严重电量级别,并为不同的电池状态设置了相应的图标:
"battery"`: {
"states": {
"good": `90`,
"warning": `25`,
"critical": `10`
},
"format": `"{icon} {capacity}%"`,
"format-charging": `" {capacity}%"`,
"format-plugged": `" {capacity}%"`,
"format-icons": [`""`, `""`, `""`, `""`, `""`, `""`, `""`, `""`, `""`, `""`, `""`],
"tooltip": `"{time}"`,
"style": `"{capacity < 10 ? 'color: red;' : 'color: normal;'}"`
}`
第二个模块是今天讨论的主题:
"custom/battery-degradation"`: {
"format": `" {}%"`,
"interval": `"once"`,
"exec": `"~/scripts/battery-degradation.sh"`,
"tooltip": `false`
}`
我已经把命令放到脚本里了------这样更方便。你也可以这样做,但别忘了添加 shebang 行#!/bin/bash和:
`chmod +x ~/scripts/battery-degradation.sh`
在该模块中,我们定义了一个带有极客图标和百分比的格式,禁用工具提示,并将其设置为在导航栏启动时启动一次。
最后,我们使用 CSS 样式来完成这些模块:
#battery`,
`#custom-battery-degradation` {
`background`: `#1e1e2e`;
`opacity`: `0.7`;
`padding`: `0px` `10px`;
`margin`: `3px` `0px`;
`margin-top`: `5px`;
`border`: `0px` `solid` `#181825`;
}
`#battery` {
`padding-right`: `10px`;
`border-radius`: `10px` `0px` `0px` `10px`;
`min-width`: `50px`;
}
`#custom-battery-degradation` {
`border-radius`: `0px` `10px` `10px` `0px`;
`margin-right`: `5px`;
`min-width`: `35px`;
}
`#battery.critical` {
`color`: `red`;
}
`
完成