I would like a command that displays the battery status in the terminal.
19 Answers
The below command outputs a lot status and statistical information about the battery. The /org/...
path can be found with the command upower -e
(--enumerate
).
upower -i /org/freedesktop/UPower/devices/battery_BAT0
Example output:
native-path: /sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0
vendor: NOTEBOOK
model: BAT
serial: 0001
power supply: yes
updated: Thu Feb 9 18:42:15 2012 (1 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: charging
energy: 22.3998 Wh
energy-empty: 0 Wh
energy-full: 52.6473 Wh
energy-full-design: 62.16 Wh
energy-rate: 31.6905 W
voltage: 12.191 V
time to full: 57.3 minutes
percentage: 42.5469%
capacity: 84.6964%
technology: lithium-ion
History (charge):
1328809335 42.547 charging
1328809305 42.020 charging
1328809275 41.472 charging
1328809245 41.008 charging
History (rate):
1328809335 31.691 charging
1328809305 32.323 charging
1328809275 33.133 charging
You could use tools like grep to get just the information you want from all that output.
One simple way: piping the above command into
grep -E "state|to\ full|percentage"
outputs:
state: charging
time to full: 57.3 minutes
percentage: 42.5469%
If you would often like to run that command, then you could make a Bash alias for the whole command. Example:
alias bat='upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"'
Add that to the end of your .bashrc file, and you can type 'bat' any time, in the terminal.
There is also a upower -d
(--dump
) command that shows information for all available power resources such as laptop batteries, external mice, etc.
-
13
upower --enumerate
can be useful if you are not sure how to useupower
.– landroniFeb 19, 2014 at 21:50 -
6@landroni And the shorthand option is
upower -e
, that command lists the available paths forupower -i ...
. If you are lazy and just want a list of all devices, useupower -d
(upower --dump
). Feb 20, 2014 at 8:57 -
1Indeed. I think this would be a useful addition to the answer itself, as when I first tried to use
upower
I immediately got lost.– landroniFeb 20, 2014 at 9:50 -
1@landroni Good point, I have updated the answer. Feel free to edit it if you have more related additions. Feb 20, 2014 at 23:41
-
10Another one-liner could be
upower -i $(upower -e | grep BAT) | grep --color=never -E "state|to\ full|to\ empty|percentage"
– WilfJun 6, 2014 at 21:27
A friendly reminder: since Linux kernel 2.6.24 using /proc
to store ACPI info has been discouraged and deprecated.
Now we are encouraged to use -> /sys/class/power_supply/BAT0
.
UPDATE: Linux 3.19 and onwards, we should look at the following directory -> /sys/class/power_supply/BAT1/
For example, checking capacity & status running
Linux 4.20
# uname -a
Linux netbook 4.20.1-arch1-1-ARCH #1 SMP PREEMPT Wed Jan 9 20:25:43 UTC 2019 x86_64 GNU/Linux
# cat /sys/class/power_supply/BAT1/capacity
99
# cat /sys/class/power_supply/BAT1/status
Charging
and
Linux 5.9
# uname -a
Linux netbook 5.9.1-arch1-1 #1 SMP PREEMPT Sat, 17 Oct 2020 13:30:37 +0000 x86_64 GNU/Linux
# cat /sys/class/power_supply/BAT1/capacity
100
# cat /sys/class/power_supply/BAT1/status
Full
-
11Specifically,
/sys/class/power_supply/BAT0/capacity
seems to show the current charge percentage. Aug 6, 2018 at 11:09 -
-
10+1, this should be the accepted answer, since it doesn't rely on extra software that might not be installed and is not needed to answer this question. @neverMind9: I don't know what you mean
/proc
is deprecated but/sys
works perfectly for me, even in kernel 4.20.– comfreakJan 15, 2019 at 17:20 -
2Terry maybe on Arch they start from BAT1 but seems that on Ubuntu always is BAT0, at least nowadays, and AFAIK almost all portable devices uses just one battery (I don't know why
acpi -b
oracpitool -B
output three). Feb 27, 2019 at 1:17 -
3Not only this should be the accepter answer, but retrieving the data can be achieved by using any programming language that has a
read
function like in PHP$capacity = trim(file_get_contents("/sys/class/power_supply/BAT0/capacity"));
making it super easy and not dependent of any external dependencies. Aug 6, 2019 at 15:40
First install acpi
by running this command,
sudo apt-get install acpi
Then run:
acpi
Sample output:
Battery 0: Discharging, 61%, 01:10:12 remaining
Or for a more verbose output that constantly updates:
watch --interval=5 acpi -V
Output:
Every 5.0s: acpi -V Wed Jan 8 15:45:35 2014 Battery 0: Full, 100% Adapter 0: on-line Thermal 0: ok, 44.0 degrees C Thermal 0: trip point 0 switches to mode critical at temperature 127.0 degrees C Thermal 0: trip point 1 switches to mode hot at temperature 127.0 degrees C Cooling 0: intel_powerclamp no state information available Cooling 1: pkg-temp-0 no state information available Cooling 2: LCD 100 of 100 Cooling 3: LCD 100 of 100 Cooling 4: Processor 0 of 10 Cooling 5: Processor 0 of 10 Cooling 6: Processor 0 of 10 Cooling 7: Processor 0 of 10 Cooling 8: Processor 0 of 10 Cooling 9: Processor 0 of 10 Cooling 10: Processor 0 of 10 Cooling 11: Processor 0 of 10
-
I run Lubuntu, with Ubuntu 18.04. After installing acpi, I get command not found.– TimoApr 9, 2020 at 4:36
-
2acpi tool is deprecated as from kernel 2.6.24 as noted on other answers.– morhookOct 5, 2020 at 23:27
-
2FWIW it's Sept 2021, I am running Ubuntu 21 (pre-relese) and this worked great. Sep 14, 2021 at 10:31
-
-
I think I understood wrongly something on ACPI deprecation, it's discouraged to use
/proc
to store the data, but your command has been updated to load from/sys
.– morhookSep 25 at 13:13
Thanks to @Wilf this works on my Ubuntu 17.10 on Lenovo Yoga 720:
upower -i $(upower -e | grep '/battery') | grep --color=never -E "state|to\ full|to\ empty|percentage"
Output:
state: fully-charged
percentage: 100%
Or just the numeric value with this one liner
upower -i $(upower -e | grep '/battery') | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//
-
On Fedora 23 I had to grep for
battery
instead ofBAT
to make it work. I found that withupower --enumerate
.– erikAug 26, 2016 at 23:45 -
-
If multiple batteries are presented (i.e. thinkpad T480), only first (internal) is shown.– LuboFeb 17, 2022 at 16:06
-
I set this up with the
watch
command so I can break in my new batteries properly. Jul 24, 2022 at 0:56 -
1@Lubo you should have separate paths for each power device. Mine shows me LCD screen and USB power, too - try
upower -e
to enumerate (list) all the paths to different devices, then use the path to specify which one from which you want to read properties after the option flag. E.g.upower -i /path/to/your/device
. Or check them all out in afor
loop:for i in $(upower -e); do upower -i $i; done
Jul 24, 2022 at 1:02
It's enough to type the command
acpi
For detailed information you can type
acpi -V
I didn't have to install any packages before.
System: Debian 7.2 64bit
-
How dis this not a duplicate to this? askubuntu.com/a/221492/830570 or askubuntu.com/a/47970/830570 ?– CadoizAug 22, 2021 at 13:27
Here is an article on a package that can check your battery life at the command line.
Basically, all you have to do is:
sudo apt-get install acpi
acpi -V
-
2
Maybe you can try:
cat /proc/acpi/battery/BAT0/state
cat /proc/acpi/battery/BAT0/info
-
29using
/proc
to store ACPI info has been discouraged and deprecated since 2.6.24. Now it's in/sys/class/power_supply/BAT0
. Jun 17, 2013 at 8:34
I'm a little late to the party but here's my little contribution. Based on the previous answers , I have made a simple script batpower:
#!/bin/bash
# Description: Battery charge in percentage
grep POWER_SUPPLY_CAPACITY /sys/class/power_supply/BAT1/uevent
The output for executing this ( ./batpower ) is going to be something like this:
POWER_SUPPLY_CAPACITY=23
N.B. : the batery number may be different for you, in my case it is BAT1, but you can always find it out by cd'ing to /sys/class/power_supply or as Lekensteyn mentioned through upower -e
My machine : Ubuntu 13.10 , 3.11.0
Replace BAT1 in the above bash code to BAT0 if you have older version Ubuntu i.e. 13.04 or later.
IMPROVED SCRIPT: Since my original post, I've made a small improvement to the script:
#!/bin/bash
# Description: Battery charge in percentage
if [ -f /sys/class/power_supply/BAT1/uevent ]
then grep POWER_SUPPLY_CAPACITY /sys/class/power_supply/BAT1/uevent
else echo "Battery isn't present"
fi
As always, pay attention to spaces with bash. This is all self explanatory. If battery is present, it will show up, if not - the script will tell you so. Now, go to your .bashrc file and add $(batpower) to your prompt. Here's mine promt:
PS1='[$(batpower)]\n${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
Update your terminal or open new tab or window, and now you can monitor battery charge constantly in terminal ! including tty ! May the scripting be praised !
-
You need to check for
/sys/class/power_supply/BAT0
and/sys/class/power_supply/BAT1
... It can be either. And you should use that path (/sys/class/power_supply/BAT#
).– dylnmcNov 8, 2015 at 16:09 -
In my Ubuntu 12.04 netbook (after changing to BAT0), I don't seem to get a POWER_SUPPLY_CAPACITY line. It looks like I could calculate it though, from the POWER_SUPPLY_CHARGE_FULL and POWER_SUPPLY_CHARGE_NOW values. Dec 26, 2016 at 15:46
-
Upvoted but Batman (Battery Manager) subconsciously has a nicer ring to it than Batpower :) On a serious note it's interesting you were writing in AskUbuntu in 2014 and how different you are today. Jul 12, 2019 at 0:22
-
1@WinEunuuuchs2Unix Yes, I've changed somewhat since I started, learned a few new tricks. batman would have a nice ring to it but it is likely copyrighted ;) Jul 12, 2019 at 2:19
You can do it without installing any extra packages:
$ echo $((100*$(sed -n "s/remaining capacity: *\(.*\) m[AW]h/\1/p" /proc/acpi/battery/BAT0/state)/$(sed -n "s/last full capacity: *\(.*\) m[AW]h/\1/p" /proc/acpi/battery/BAT0/info)))%
94%
This command is lifted from byobu's source. It might be a good candidate for a Bash alias.
-
+1 from me! CLI FTW. If you have 2 battery's change BAT0 for BAT1 :)– RinzwindJun 10, 2011 at 7:31
-
2Is discourage since 2.6.24, we should use
/sys/class/power_supply/BAT0/
Feb 26, 2019 at 22:35
You can either type :
$ acpi -i
Battery 0: Discharging, 98%, 02:51:14 remaining
Battery 0: design capacity 4400 mAh, last full capacity 3733 mAh = 84%
or
$ upower -i $(upower -e | grep BAT)
native-path: BAT0
model: PA5109U-1BRS
serial: FA80
power supply: yes
updated: lun. 07 janv. 2019 03:54:18 CET (24 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: discharging
energy: 39,521 Wh
energy-empty: 0 Wh
energy-full: 40,328 Wh
energy-full-design: 47,52 Wh
energy-rate: 13,856 W
voltage: 10,8 V
time to empty: 2,9 hours
percentage: 98%
capacity: 84,8632%
technology: lithium-ion
History (charge):
1546829628 98,000 discharging
1546829593 99,000 discharging
History (rate):
1546829658 13,856 discharging
1546829628 14,752 discharging
1546829597 4,806 discharging
1546829594 2,678 discharging
or with the distrib's inxi package (more up to date from the inxi official source code here)
$ inxi -Bxxx
Battery: ID-1: BAT0 charge: 37.4 Wh condition: 37.4/47.5 Wh (79%) volts: 10.8/10.8 model: PA5109U-1BRS type: Li-ion
serial: FA80 status: Full
This did the job for me in ubuntu 14.04:
cat /sys/class/power_supply/BAT0/capacity
-
2
cat /sys/class/power_supply/BAT?/capacity
would be a better idea, since it might beBAT1
instead ofBAT0
. Mar 16, 2021 at 23:41
Run the following command in a terminal for getting detailed info:
cat /proc/acpi/battery/BAT0/info
If you just want the state do:
cat /proc/acpi/battery/BAT0/state
-
2
-
Install acpi, then use watch
to continously monitor thru command line.
E.g.
watch --interval=5 acpi -V
will show the information such as below and will update every 5 seconds.
Battery 0: Full, 100%, rate information unavailable
Battery 0: design capacity 6000 mAh, last full capacity 3424 mAh = 57%
Question is why would someone do this? Well, I have a laptop with broken LCD screen that I am now using as my bittorrent box.
I was going to suggest acpi
but after reading it's not working in 11.10, I had an idea.
Please type this in your terminal:
ls /proc/acpi/battery/BAT0
or BAT1
If you get a "file or directory not found" then this isn't going to work.
But, if it lists files, then here's a script [paste it into /usr/games/ or other directory in $PATH, and run sudo chmod +x /usr/games/batterypercent
, or whatever you name it] that I just wrote for you that will give you an estimate battery percentage [See below]:
(Note, if not already installed, install the program calc
from the repo: sudo apt-get install apcalc
)
#!/bin/bash
math() { calc -d "$@"|tr -d ~; }
cd /proc/acpi/battery/BAT0;
max=$(grep 'design capacity:' info|awk '{print $3}')
current=$(grep 'remaining capacity:' state|awk '{print $3}')
percent=$(math "($current / $max) * 100");
echo $(echo $percent|cut -d. -f1)%
I have tested this script on my laptop. I say estimate above because acpi
shows 93% battery, and my script shows 90% battery, so try this script against your GUI battery percentage, and see how off it is. In my case, it seems to be consistently 3% lower than acpi's percentage. In that case, you can add this line right before the last line: percent=$((percent + 3))
, where "3" is the percentage it's low by.
**In my lenovo, the battery is listed as BAT1, try that too. (12.04 LTS)
-
-
Argh.. okay, I'm almost positive this is why
acpi
doesn't work, because I guess 11.10 doesn't support your laptop's ACPI functions as well [battery, etc]. I think I've experienced something like this when upgrading in the past. I'm still on 11.04 though. Sorry that this didn't work for ya :(– MattOct 20, 2011 at 15:36 -
Similar script without calc or apcalc:
#! /bin/bash
cd /proc/acpi/battery/BAT0;
max=$(grep 'design capacity:' info|awk '{print $3}')
current=$(grep 'remaining capacity:' state|awk '{print $3}')
percent=$(expr $current"00" / $max )
echo -e "Current capacity: \t$current"
echo -e "Max capacity: \t$max"
echo -e "Percent: \t\t$percent"
Here is what I use. It just looks at the diff between full charge and current charge as well as seeing if the charge is dropping in which case it uses notify to alert the user.
#!/bin/bash
#
# experimental battery discharge alerter
#
nsecs=3 # loop sleep time between readings
#
ful=$(cat /sys/class/power_supply/BAT0/energy_full)
#
oldval=0
while true
do
cur=$(cat /sys/class/power_supply/BAT0/energy_now)
dif="$((ful - cur))"
slope="$((cur - oldval))"
if [ "$slope" -lt 0 ]
then
echo "*** discharging!"
notify-send -u critical -i "notification-message-IM" "discharging"
fi
oldval=$cur
sleep $nsecs
done
This won't help everyone, but it did me - I use byobu whenever I am using a terminal, and battery is one of the options for the status notifications bar.
You can simple run: upower -i $(upower -e | grep BAT)
> upower -i $(upower -e | grep BAT)
native-path: BAT0
vendor: SMP
model: L19M3PF7
serial: 3223
power supply: yes
updated: Sun 05 Mar 2023 02:33:38 PM EET (21 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: discharging
warning-level: low
energy: 5.45 Wh
energy-empty: 0 Wh
energy-full: 37.33 Wh
energy-full-design: 45 Wh
energy-rate: 16.219 W
voltage: 10.82 V
charge-cycles: 917
time to empty: 20.1 minutes
percentage: 14%
capacity: 82.9556%
technology: lithium-polymer
icon-name: 'battery-caution-symbolic'
History (charge):
1678019588 14.000 discharging
History (rate):
1678019618 16.219 discharging
1678019588 14.814 discharging
1678019558 13.941 discharging
1678019528 12.350 discharging
cat /proc/acpi/ac_adapter/AC/state
-
3not sure what you're talking about here. running it in the terminal gave
cat: /proc/acpi/ac_adapter/AC0/state: No such file or directory
– infoquadApr 19, 2011 at 12:06
$ upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage"