添置了一台ThinkPad R400作为新的主力机,按照惯例装上Arch Linux,并换一块全新的电池。结果没用多久,电池的寿命就只剩下90%了,真是心疼,亏我买的是7800mAh的大容量!
查一查不难知道,早期ThinkPad适用的锂离子电池,在循环充电数次后,寿命就会下降。所谓循环充电,指的就是电量用尽后再充满。想想我坚持这种错误的用法也有两周有余,电池不损耗才怪!
正确的维护方法,应当是每次充电时不要充满,充到90%左右为止,这样可以大大延长电池寿命。早期的ThinkPad,在Windows下可以配合联想官方的ThinkVantage管理软件与“联想电源管理”程序,防止过充,保护电池。但是,该工具早已不支持Windows 10(安装时直接弹出兼容性警告而无法继续),况且我用的是Arch Linux。
所幸天无绝人之路,在Linux下也有适用于ThinkPad的电源管理驱动——TP SMAPI。它可以访问早期ThinkPad主板上搭载的控制芯片,来直接控制ThinkPad的充电行为。接下来的教程就是利用该驱动来限制充电量,弥补Linux缺少“联想电源管理”的缺憾。
使用前注意
以下教程在Arch Linux下进行。其他的发行版可能也提供了名字相同(或相近)的软件包,效果相同。
本教程的TP SMAPI驱动仅适用于早期的ThinkPad,也就是“2字辈”诞生之前的产品。“2字辈”指X220系列、T420、W520等,采用第二代酷睿处理器的设备,从这一代开始联想就把小黑的遗产一步步抛弃。
重新插拔电池后,充电参数可能会恢复到默认值,你需要重新设置。如果你经常换电池,可以参考ArchWiki里提到的解决方案。
安装TP SMAPI驱动
使用标准内核时
Arch Linux的官方源收录了TP SMAPI驱动:
1 |
|
注意这里提供了两个版本的tp_smapi
驱动,分别适用于不同的内核版本:
tp_smapi
对应最新版内核(软件包linux
)tp_smapi-lts
对应LTS内核(软件包linux-lts
)
它们与当前内核版本一一对应,所以在升级内核的时候必须同时升级,否则重启后会找不到驱动。
笔者使用的是LTS内核,所以安装tp_smapi-lts
软件包(同时升级内核):
1 |
|
使用非标准内核时
另外,如果使用的是非标准内核(如Zen内核,linux-zen
),则不适用上述两个包,应当使用AUR里的tp_smapi-dkms
软件包。得益于DKMS,它可以在任意版本内核中运行。
首先安装必要的软件包:DKMS和当前内核的头文件包。头文件包可以使用pacman -Ss linux headers
查询,例如Zen内核对应的头文件包是linux-zen-headers
。
1 |
|
注意: 更新内核时,头文件包也要同步更新!
激活TP SMAPI驱动
立即激活驱动
直接运行以下命令即可:
1 |
|
重启后自动激活
安装完成后,还需让系统在启动时自动加载驱动。
在/lib/modules-load.d/
里建立一个新文件tp_smapi.conf
(可以是其他名字),填入以下内容:
1 |
|
建立这个配置文件后,下次重启时,系统就能自动加载tp_smapi
驱动了。
设置充电参数
参数作用
驱动激活之后,会创建文件夹/sys/devices/platform/smapi/
,内容如下所示:
1 |
|
其中,BAT0
子目录有一系列显示和控制当前供电系统的特殊文件,我们关心的是start_charge_thresh
和stop_charge_thresh
。
start_charge_thresh
指定ThinkPad处于充电状态的百分比。当电量低于该值时,开始充电,直到达到或者超过该值为止。如果超过该值,则停止充电,转而使用AC供电。——因此可以理解成充电的上限。
stop_charge_thresh
指定ThinkPad停止充电的百分比。当电量高于该值时,将不会给电池充电,电量会自然消耗至该值以下,随后用AC供电。
设置时必须满足的要求
为了最大限度发挥驱动的功效,实际设置这两个值时,应当满足以下条件:
- 两个值均低于100,以保证电池不充满
start_charge_thresh
设置在较高水准,一般在80~95。过低的值会导致电池充不了多少电量,影响使用stop_charge_thresh
比前者略高10以内的值,建议高4~5。但该值不能大于等于100
例如,我这台ThinkPad R400的电池寿命为90%,则给它充到80%为宜,运行下列命令设置参数:
1 |
|
提示: 如果设置的
start_charge_thresh
大于stop_charge_thresh
,则后者的值会自动设为前者的值+4。
设置值会立即生效,且永久生效,无需再添加其他的配置文件。
实际使用效果
以ThinkPad R400为例。按照上一节设置后,我拔掉适配器,正常使用至电量剩余20%。随后插入适配器,系统显示正在充电。
当电量充至80%时,点开KDE Plasma托盘上的电量图标,就会发现它显示“不在充电”,而非继续充电。按照这一强度使用约两周,电池寿命始终保持在90%。
在另一台ThinkPad X201 Tablet上进行配置,用到电池电量只剩3%后再充电,寿命也一直得以保持在96%。
期待持续使用后,电池寿命能继续得到保证,从此可以放心使用ThinkPad了。
参考资料
- Tp smapi - ThinkWiki
- Tp smapi - ArchWiki,包含了更进阶的用法。
- 本文作者: 爱拼安小匠
- 本文链接: https://anclark.github.io/2022/06/01/Struggle_with_Linux/ThinkPad充电管理驱动/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0(署名-非商用-禁止演绎 3.0) 许可协议。转载请注明出处!