如何在Linux上限制ASUS笔记本电脑的电池充电(设置充电阈值)
新的华硕笔记本电脑支持电池电量限制,可以延长电池寿命。本文介绍如何在Linux上为ASUS笔记本电脑设置电池充电阈值。
电池寿命受老化,高温,充电周期数和充满电时间的影响。电池充电阈值可减少充满电的时间(100%),并改善电池状况/寿命。
华硕笔记本电脑支持设置充电阈值 以。。开始 Linux 5.4。假设充电电池是第一个电池,设置充电阈值的内核WMI方法没有提供指定电池的方法。BAT0
)。但是,某些新的ASUS笔记本电脑无法调用主电池 BAT0
, 但 BATT
(例如:Zenbook UM431DA)和 BAT1
(例如:华硕TUF游戏FX706II)。 [Edit] 还有BATC。
因此,华硕笔记本电脑支持Linux 5.4及更高版本的电池充电限制,即 BAT0
..对于华硕笔记本电脑使用 BATT
作为主电池的名称,您将需要 内核5.7, BAT1
你会需要 5.8内核 (您可以按照以下步骤确切地找到如何检查电池名称的方法)。 [Edit] 必须用于使用BATC电池名称的ASUS笔记本电脑 Linux 5.9 或以后。
另外,并非所有的ASUS笔记本电脑都支持设置电池充电阈值,因此根据您的ASUS笔记本电脑的型号,此阈值可能会或可能不会起作用。我找不到支持的设备列表。
请注意,用于为ASUS笔记本电脑设置电池充电阈值的内核WMI方法只能设置一个停止值()charge_control_end_threshold
(也不能设置启动阈值)。同样,当连接了交流电时,如果电池电量高于充电停止阈值,则不会将其放电到停止阈值。
还有另一个注意事项。 在GNOME Shell中运行Ubuntu 20.04的ASUS ZenBook 14 UX433FAC上,当电池电量高于充电阈值,限制电池电量并将笔记本电脑连接至AC时,顶部面板上的电池指示器将从剩余时间开始闪烁,直到电池电量耗尽为止。电池将放电,直到电池充满为止的剩余时间。即使电池未充电,也会发生这种情况。片刻之后(不是将笔记本电脑连接到交流电源的那一刻),电池指示灯将显示“未充电”。
除了华硕,还有一些联想和华为(后者是 Linux 5.5笔记本电脑还支持限制电池充电。但是,我仅拥有一台ASUS笔记本电脑,无法在其他设备上对其进行测试,因此本指南仅适用于ASUS。 联想已经对此提供了相当长的支持,并且TLP支持此内置配置(仅IBM / Lenovo ThinkPad)。附带说明一下,这是一个GUI,可以轻松配置TLP(如果您尚未使用它的话)。
您可能还会喜欢:auto-cpufreq是Linux的CPU速度和功率优化器
1.找出华硕笔记本电脑的电池名称。
让我们先了解一下华硕笔记本电脑的电池名称。可以使用以下命令完成此操作:
ls /sys/class/power_supply
此命令应输出如下内容:
AC0 BAT0
在此示例中(从我的ASUS笔记本电脑中),电池的名称为 BAT0
,但是正如我上面提到的,它也可能适合您 BAT1
或者 BATT
,这些是ASUS笔记本电脑内核支持的唯一电池名称。
2.创建一个systemd服务以设置启动时的电池停止充电阈值。
在创建系统服务之前,实际上是在笔记本电脑上 charge_control_end_threshold
到 /sys/class/power_supply/BAT*
(没有它,将无法正常工作):
ls /sys/class/power_supply/BAT*/charge_control_end_threshold
如果此命令返回路径 charge_control_end_threshold
,华硕笔记本电脑支持电池充电限制。如果命令返回错误消息,指出该文件或目录不存在,则笔记本电脑不支持设置充电阈值。
如果您的ASUS笔记本电脑上有此文件,则可以继续。创建要调用的文件 battery-charge-threshold.service
到 /etc/systemd/system
..
您可以使用以下命令在默认控制台文本编辑器中打开此文件:
sudo editor /etc/systemd/system/battery-charge-threshold.service
或者,使用Gedit或要使用的图形编辑器(例如,如果Gedit以root身份打开此文件: gedit admin:///etc/systemd/system/battery-charge-threshold.service
)
您需要将以下内容粘贴到该文件中:
[Unit]Description=Set the battery charge thresholdAfter=multi-user.targetStartLimitBurst=0[Service]
Type=oneshotRestart=on-failureExecStart=/bin/bash -c 'echo CHARGE_STOP_THRESHOLD > /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold'[Install]
WantedBy=multi-user.target
在这里换 BATTERY_NAME
以电池的名称(BAT0
, BAT1
或者 BATT
),和 CHARGE_STOP_THRESHOLD
要使用的电池充电停止阈值(范围1-100)。请注意 我已经看过了 一个用户无法将计费阈值设置为任何值,只能设置为60、80和100。
根据我的阅读,要使笔记本电脑大部分时间都连接到交流电源,以获得最佳的电池寿命,请将电池充电停止阈值设置为大约50或60。如果您一定时间使用电池,请将电池充电停止阈值设置为。大约90
3.启用并启动电池充电阈值系统服务。
接下来,让我们启用并启动新创建的电池充电阈值系统服务。
sudo systemctl enable battery-charge-threshold.service
sudo systemctl start battery-charge-threshold.service
在systemd 220上,您可以用来直接启用和启动服务。 systemctl enable --now
但是,某些读者更喜欢使用两个命令,以防他们使用较旧的systemd版本。
如果要更改电池停止充电的阈值水平,则需要进行编辑 /etc/systemd/system/battery-charge-threshold.service
从文件中更改数字,然后 ExecStart
行(后 echo
)更改为要使用的新值,然后重新加载systemd(因为文件的内容已更改)并使用以下命令重新启动systemd服务:
sudo systemctl daemon-reload
sudo systemctl restart battery-charge-threshold.service
4.确保电池充电停止阈值正常工作。
如果您的ASUS笔记本电脑支持它,则需要将电池充电限制设置为您在步骤2中使用的值。
可以通过将笔记本电脑充电至设置的阈值来确认。 battery-charge-threshold.service
,然后使用以下命令:
cat /sys/class/power_supply/BATTERY_NAME/status
交换 BATTERY_NAME
按照步骤1所述命名电池。
如果电池充电停止阈值正常工作,该命令应显示以下输出:
Not Charging
如果看到“正在放电”,请确保您的ASUS笔记本电脑实际上是使用交流电源而不是电池供电。但是,如果显示“正在充电”,则此操作不起作用,因为您的笔记本电脑正在充电并且超过了充电停止阈值,而您的ASUS笔记本电脑不支持此功能( charge_control_end_threshold
如步骤2)所述,您使用的Linux版本过旧,无法限制ASUS笔记本电脑的电池电量,或者是由于人为错误😁️造成的。
添加:如果您不使用systemd,也可以使用cron进行此操作。 sudo crontab -e
然后粘贴以下行(这是单行,在该行上单击三次以选择整行)。
@reboot echo CHARGE_STOP_THRESHOLD > /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold
交换 CHARGE_STOP_THRESHOLD
使用您要使用的电池充电停止阈值 BATTERY_NAME
使用在步骤1中看到的电池名称。
为什么要使用系统服务或Cron作业?根据采用了这些步骤的u / esrevartb的说法,“ udev规则不起作用,因为在应用该规则时尚未初始化电池sysfs路径,或者无法初始化此特定的charge_control_end_threshold属性。看来。我对此进行了更改。 ”
[[Edit] 我也发现 脚本和系统服务 您可以轻松地在Linux上为ASUS笔记本电脑设置电池充电限制。有了它,很容易更改电池的充电极限(您所要做的就是 ./limit.sh CHARGE_STOP_THRESHOLD
)
笔记本电池相关:Bwall是适用于Linux的动画电池壁纸(Bash脚本)
通过 r / linux硬件 (感谢您/ esrevartb)