我的联想 L13 Yoga 上安装了 Ubuntu 20.04。
upower -i /org/freedesktop/UPower/devices/battery_BAT0
native-path: BAT0
vendor: Sunwoda
model: 5B10W13935
serial: 666
power supply: yes
updated: Mi 30 Mär 2022 14:43:14 (32 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: fully-charged
warning-level: none
energy: 38.33 Wh
energy-empty: 0 Wh
energy-full: 39.8 Wh
energy-full-design: 46 Wh
energy-rate: 2.313 W
voltage: 16.885 V
percentage: 96%
capacity: 86.5217%
technology: lithium-polymer
icon-name: 'battery-full-charged-symbolic'
History (rate):
1648644193 2.313 discharging
但
§ cat /sys/class/power_supply/BAT0/capacity
96
§ cat /sys/class/power_supply/BAT0/status
Unknown
即使我的充电器已插入。有人知道发生了什么事吗?
答案1
这是不同开发者群体对单词含义持有不同看法的“奇妙”结果之一。也深入研究电池的历史,你会看到至少三个不同团队的成果:
- 电池制造商的固件开发团队
- 笔记本电脑供应商的固件开发团队
- 开发
upower
团队
并非所有电池都具有相同的 API 端点集。当您使用/sys/class/power_supply
“文件”时,实际上是通过内核挂钩查询设备的固件。这些与笔记本电脑供应商提供的固件交互,在本例中,笔记本电脑供应商是联想。联想从几个不同的供应商处获得电池,包括 Sunwoda、LGC、深圳明益源电子、Sunwind、Bamtop、东莞 Lewe、深圳 Glory 等。这些电池制造商中的每一个都有不同的固件端点,用于报告充电周期、可用电压、充电限制等信息。联想固件将电池固件中的不同端点转换为半标准化的端点集,联想硬件可以使用这些端点来管理电池并将信息报告回操作系统。
硬件人员已经说完了,现在我们可以看看多年来为联想(和其他硬件制造商)做出贡献的无数开发upower
人员,他们对联想(和其他硬件制造商)多年来提供的终端进行了逆向工程。由于公司很少提供任何文档,因此开发人员必须查看他们面前的数据并找出各个位的含义。对于联想upower
,这意味着:
硬件 API 端点 | 值upower |
定义 |
---|---|---|
/sys/class/power_supply/BAT0/capacity |
percentage |
当前电池电量百分比(介于0 和之间107 ...不要询问) |
/sys/class/power_supply/BAT0/state |
state |
当前电池活动(idle ,,,,)charging fully-charged discharging unknown |
对于我的联想 X1 Carbon,/sys/class/power_supply/BAT0/state
是/sys/class/power_supply/BAT0/status
,因为为您的笔记本制作固件的团队与为我的笔记本制作固件的团队不同。有趣的是,笔记本可以同时拥有state
和相互冲突status
,例如我的联想 W541 和我妻子的东芝。这会导致upower
(和 Gnome)报告错误的电池状态。我的 W541 总是充满电,即使它没有充满电。我妻子的东芝总是在充电,即使电池已充满电。
这自然会引发一个问题:我可以信任哪些值?不幸的是,这取决于您认为哪组开发人员最了解您的计算机。对我来说,我倾向于使用报告的数字作为upower
“大致范围”,而 中的信息则/sys/class/power_supply
是真理。这并不总是正确的,特别是对于华硕机器,但事实证明多年来它是最一致的。
希望这可以解答您的一些疑问。
答案2
在这种情况下,另一个有用的端点是energy-rate
。当充电真正完成并且外部电源可用时,它将降至 0。无论state
或status
说什么,这都是权威的,因为它是电池中的 BMS 芯片报告的实际电流进入电池(或放电时流出)。