452

I would like a command that displays the battery status in the terminal.

Newbyte
  • 109
Joe
  • 4,521

19 Answers19

461

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.

Lekensteyn
  • 174,277
  • 13
    upower --enumerate can be useful if you are not sure how to use upower. – landroni Feb 19 '14 at 21:50
  • 6
    @landroni And the shorthand option is upower -e, that command lists the available paths for upower -i .... If you are lazy and just want a list of all devices, use upower -d (upower --dump). – Lekensteyn Feb 20 '14 at 08:57
  • 1
    Indeed. I think this would be a useful addition to the answer itself, as when I first tried to use upower I immediately got lost. – landroni Feb 20 '14 at 09:50
  • 1
    @landroni Good point, I have updated the answer. Feel free to edit it if you have more related additions. – Lekensteyn Feb 20 '14 at 23:41
  • 10
    Another one-liner could be upower -i $(upower -e | grep BAT) | grep --color=never -E "state|to\ full|to\ empty|percentage" – Wilf Jun 06 '14 at 21:27
  • I ran the above command and it says updated: Thursday 01 January 1970 05:30:00 AM IST (1531404045 seconds ago). Any ideas how can I update this information? – Rahul Goswami Jul 12 '18 at 14:04
  • Each one of the 327 up-votes is well deserved. Note: replace BAT0 with BAT1 if answer doesn't work for you. – WinEunuuchs2Unix Jul 12 '19 at 01:07
  • ⚠️ percentage is relative to energy-full, and once energy-full is (a lot) smaller than energy-full-design you get misleading results. My 5yo laptop has about 80% capacity so I ran into forced shutdowns because my alert uses percentage and triggered too late. energy / energy-full-design is, arguably, more helpful to decide when to start charging; percentage is more useful for deciding when to stop. – Raphael Jan 31 '24 at 10:27
207

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
Terry Wang
  • 9,775
  • 11
    Specifically, /sys/class/power_supply/BAT0/capacity seems to show the current charge percentage. – thomasa88 Aug 06 '18 at 11:09
  • Deprecated… does it still work? – neverMind9 Aug 28 '18 at 16:21
  • 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. – comfreak Jan 15 '19 at 17:20
  • 2
    Terry 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 or acpitool -B output three). – Pablo Bianchi Feb 27 '19 at 01:17
  • 3
    Not 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. – Amin NAIRI Aug 06 '19 at 15:40
  • @PabloBianchi I've seen BAT1 since I installed Arch on the netbook ;-) It makes more sense for the broader audience that battery start from 0 instead of 1, I agree with you. – Terry Wang Dec 21 '19 at 11:40
  • Is this POSIX compatible, or Linux only? – Sapphire_Brick Mar 14 '21 at 23:25
  • @Sapphire_Brick Only tested on Linux, so I reckon it is Linux only. Don't know how other UNIX-like systems, e.g. Solaris, BSD flavours represent battery (may need to leverage sysctl to make it POSIX compatible). – Terry Wang Mar 16 '21 at 04:52
  • 1
    ⚠️ capacity here is not what "capacity" usually means (e.g. in the output of upower). In upower, it's called percentage. That's important because capacity is relative to energy_full, and once energy_full is (a lot) smaller than energy_full_design you get misleading results. My 5yo laptop has about 80% energy_full / energy_full_design so I ran into forced shutdowns because my alert uses capacity and triggered too late. – Raphael Jan 31 '24 at 10:24
90

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

morhook
  • 1,610
  • 14
  • 23
Suhaib
  • 4,110
  • I run Lubuntu, with Ubuntu 18.04. After installing acpi, I get command not found. – Timo Apr 09 '20 at 04:36
  • 2
    acpi tool is deprecated as from kernel 2.6.24 as noted on other answers. – morhook Oct 05 '20 at 23:27
  • 2
    FWIW it's Sept 2021, I am running Ubuntu 21 (pre-relese) and this worked great. – Mauvis Ledford Sep 14 '21 at 10:31
  • This is the way to go for me on Debian – Konrad Gajewski Jan 07 '22 at 11:44
  • 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. – morhook Sep 25 '23 at 13:13
  • ⚠️ Same note as for upower and /sys/class/power_supply: The percentage given is relative to the remaining battery capacity, not the designed capacity. Once your battery capacity degrades, the given percentage can be misleading, esp. when running low! – Raphael Jan 31 '24 at 12:10
34

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/%//
rubo77
  • 32,486
  • On Fedora 23 I had to grep for battery instead of BAT to make it work. I found that with upower --enumerate. – erik Aug 26 '16 at 23:45
  • grep for battery works in Ubuntu too, so I changed it from BAT – rubo77 Feb 07 '18 at 01:11
  • If multiple batteries are presented (i.e. thinkpad T480), only first (internal) is shown. – Lubo Feb 17 '22 at 16:06
  • I set this up with the watch command so I can break in my new batteries properly. – Avery Freeman Jul 24 '22 at 00: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 a for loop: for i in $(upower -e); do upower -i $i; done – Avery Freeman Jul 24 '22 at 01:02
  • @AveryFreeman thanks. I have ended up using tlp-stat -b and acpitool. Your approach is definitely worth of effort also. I have tried it now and it works. Perhaps I will finally make some script using it. – Lubo Jul 24 '22 at 19:51
32

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

Charo
  • 3,631
  • How dis this not a duplicate to this? https://askubuntu.com/a/221492/830570 or https://askubuntu.com/a/47970/830570 ? – Cadoiz Aug 22 '21 at 13:27
22

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
jokerdino
  • 41,320
20

Maybe you can try:

cat /proc/acpi/battery/BAT0/state

cat /proc/acpi/battery/BAT0/info

Kris Harper
  • 13,477
Mariano L
  • 702
  • 29
    using /proc to store ACPI info has been discouraged and deprecated since 2.6.24. Now it's in /sys/class/power_supply/BAT0. – Terry Wang Jun 17 '13 at 08:34
17

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 ! enter image description here

Cysioland
  • 127
  • 6
Sergiy Kolodyazhnyy
  • 105,154
  • 20
  • 279
  • 497
  • 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#). – dylnmc Nov 08 '15 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. – mwfearnley Dec 26 '16 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. – WinEunuuchs2Unix Jul 12 '19 at 00: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 ;) – Sergiy Kolodyazhnyy Jul 12 '19 at 02:19
10

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 
SebMa
  • 2,291
10

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.

ændrük
  • 76,794
8

This did the job for me in ubuntu 14.04:

cat /sys/class/power_supply/BAT0/capacity
s3lph
  • 14,314
  • 11
  • 59
  • 82
7

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
Lekensteyn
  • 174,277
MEM
  • 11,065
7

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.

Kris Harper
  • 13,477
iceburn
  • 71
4

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)

xcorat
  • 113
Matt
  • 9,993
  • Matt, tried your suggestion, got a "No file or directory" – Joe Oct 20 '11 at 13:41
  • 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 :( – Matt Oct 20 '11 at 15:36
  • So, just curious, can you paste the output of ls /proc/acpi/ ? Thanks – Matt Oct 20 '11 at 15:41
2

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"
xerostomus
  • 990
  • 9
  • 20
2

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
1

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
1

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.

-4
cat /proc/acpi/ac_adapter/AC/state
Eric Carvalho
  • 54,385
  • 3
    not 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 – infoquad Apr 19 '11 at 12:06