Linux 系统中的电池衰减

大家好!我是大聪明-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`;
}
`

完成

相关推荐
人生匆匆3 小时前
部署使用rathole内网穿透
linux·运维·docker
Prada-88084 小时前
dig常用命令
linux·运维·服务器
boy快快长大4 小时前
下载Dokcer安装到另一台无网CentOS
linux·运维·centos
IMA小队长4 小时前
Linux下Mamba-YOLO复现
linux·运维·yolo
Shawn_CH4 小时前
Linux 共享内存详解
嵌入式
C语言不精4 小时前
Tina Linux SDK编译SDK-linux环境下实现
linux·运维·服务器
WG_174 小时前
Linux:进程地址空间
linux
Xの哲學4 小时前
Linux MAC层实现机制深度剖析
linux·服务器·算法·架构·边缘计算
奇点爆破XC4 小时前
centos进阶命令.Linux系统介绍(运维版)
linux·运维·centos