This is a step by step beginner’s guide shows how to configure your Ubuntu laptop to limit the maximum battery charge level.
For those who keep laptop plugged in for long term, it’s better to set battery charge limit to reduce the battery wear by constantly trickle charging.
Linux Kernel supports battery charge threshold, and there’s a merge request to provide graphical UI options in Gnome Control Center. Until GNOME officially support this feature, you can follow this tutorial to do the job step by step.
Step 1: Check if your laptop supports charge threshold
Most modern laptops support charge limiting, but old machines may NOT. In my case, the cheap HP laptop does not support it, but ThinkPad does.
First, press Ctrl+Alt+T
on keyboard to open up a terminal window. Then run command:
ls /sys/class/power_supply/
It will list the device names including your battery, usually BAT0, BAT1, BATC, BATT, etc.
In my case, its BAT0
. To tell if it supports battery charge limit, run:
ls /sys/class/power_supply/BAT0
Replace BAT0
in last command accordingly. And, it will output following 2 files telling that its support the feature!
charge_control_start_threshold
charge_control_end_threshold
While, charge_start_threshold
and charge_stop_threshold
are legacy API (usually for ThinkPad) that automatically synced to the previous 2.
Step 2: Set Battery Charge Start & Maximum Limit Level
To set the charge limit, simply set the value number (from 0
to 100
) of the 2 key files listed above.
For example, set the battery start charging level to 80. So, when power supply is plugged in, it only starts charging when battery is lower than 80%.
sudo sh -c "echo 80 > /sys/class/power_supply/BAT0/charge_control_start_threshold"
Here you need to replace BAT0
according to last step, and change value 80 as you want.
To set maximum battery charging limit, run command:
sudo sh -c "echo 88 > /sys/class/power_supply/BAT0/charge_control_end_threshold"
Here I set to stop battery charging when reaching level 88%. Also, change the number and BAT0
accordingly.
The changes apply immediately after running the commands above. You can verify by checking the battery icon status in system tray, or run command below to tell if it’s charging:
cat /sys/class/power_supply/BAT0/status
Step 3: Create Battery Charge Threshold Service (Optional)
The previous steps works in my ThinkPad even after reboot. If NOT for you, then create a systemd service to make it permanent.
To create a service to automatically set maximum battery charge limit on startup, do:
1. First, press Ctrl+Alt+T
on keyboard to open terminal. When it opens, run command:
sudo nano /etc/systemd/system/battery-charge-end-threshold.service
This command creates a service file and edit via the nano
command line text editor. You can replace nano
with gedit
for Ubuntu 22.04, or gnome-text-editor
for Ubuntu 24.04. Though, nano
works in most desktop environments.
When the file opens, paste following lines:
[Unit] Description=Set Battery Charge Maximum Limit After=multi-user.target StartLimitBurst=0 [Service] Type=oneshot Restart=on-failure ExecStart=/bin/bash -c 'echo 90 > /sys/class/power_supply/BAT0/charge_control_end_threshold' [Install] WantedBy=multi-user.target
Here replace BAT0
according to step 1, and change number 90
as you want. Finally, press ctrs+s to save file, and ctrl+x to exit.
2. After created the service file, run the following commands one by one to enable & start it.
systemctl enable battery-charge-end-threshold.service
systemctl daemon-reload
systemctl start battery-charge-end-threshold.service
If you also want to create a service to set battery start charging level, re-do the last steps, but replace the service name, as well as level number and charge_control_end_threshold
with charge_control_start_threshold
in file content.
Set Battery Charge Limit via TLP (Another Way)
The popular TLP power saving tool also has the feature to set charge threshold for laptop users. Though, you still need the battery support. Meaning the charge_control_start_threshold
and charge_control_end_threshold
files must exist under /sys/class/power_supply/BAT*.
1. First, press Ctrl+Alt+T
on keyboard to open terminal. Then, run command to install TLP:
sudo apt install tlp
For the latest version, see the official Docs.
2. Then, edit the config file by running command:
sudo nano /etc/tlp.conf
Also, you may replace nano
text editor according to your desktop environment. When file opens, find out the following 2 lines (use Ctrl+W in nano), un-comment (remove # at the beginning), and change the number as you want.
START_CHARGE_THRESH_BAT0=80 STOP_CHARGE_THRESH_BAT0=90
Finally, press Ctrl+S to save file and Ctrl+X to exit editing.
3. To verify if the setting applied, run sudo tlp-stat -b
to check.
Finally, make sure TLP service is running by running commands:
systemctl enable tlp.service
systemctl start tlp.service
And use systemctl status tlp.service
to verify the service status. For more about the TLP power saving tool, see its website.
Undo
To uninstall TLP, open terminal (Ctrl+Alt+T) and run command:
sudo apt remove tlp tlp-*
To remove the manually created startup service, run commands below one by one to stop, disable and remove the service file.
systemctl stop battery-charge-end-threshold.service
systemctl disable battery-charge-end-threshold.service
sudo rm /etc/systemd/system/battery-charge-end-threshold.service
Finally, you may reset the start and end charging threshold via commands (also replace BAT0
accordingly):
sudo sh -c "echo 0 > /sys/class/power_supply/BAT0/charge_control_start_threshold"
sudo sh -c "echo 100 > /sys/class/power_supply/BAT0/charge_control_end_threshold"
Hey the Ji m.
I have a Lenovo laptop that supports charge threshold ( I know that because I had tlp installed and working previously ), but there is no such file as charge_control_start_threshold in my BAT1 folder.
I don’t want to use method 2 because I don’t want to install tlp anymore, because tlp changes some other configuration that I don’t want.
My Asus laptop is the same
Suuuuuuuuuper nice!!!! THNX a lot!!!!!!!
Unfortunately I am unable to use this with my HP Probook.
I have an asus Zenbook Ux391UA, i tried all the methods above, although i can change the threshold, or create a nano file. It still comeback to end_threshold at 60% after i restart my computer.
Thanks, I just set up my Lenovo Legion. It only supports
* STOP_CHARGE_THRESH_BAT0: 0(off), 1(on) — battery conservation mode
Enabling sets the threshold to 80%
Hi Jim, I encountered this error:
“Job for battery-charge-end-threshold.service failed because the control process exited with error code.
See “systemctl status battery-charge-end-threshold.service” and “journalctl -xeu battery-charge-end-threshold.service” for details.”
Can you help me?
Thanks it worked