如何在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.7BAT1 你会需要 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 以电池的名称(BAT0BAT1 或者 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)

Sidebar