如何在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