327

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

  • 29
    $ upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage" – Jake Berger Dec 4 '14 at 17:23

19 Answers 19

344

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.

  • 9
    upower --enumerate can be useful if you are not sure how to use upower. – landroni Feb 19 '14 at 21:50
  • 5
    @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 8: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 9: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
  • 8
    Another one-liner could be upower -i $(upower -e | grep BAT) | grep --color=never -E "state|to\ full|to\ empty|percentage" – Wilf Jun 6 '14 at 21:27
130

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 on Arch Linux 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
  • 1
    Specifically, /sys/class/power_supply/BAT0/capacity seems to show the current charge percentage. – thomasa88 Aug 6 '18 at 11:09
  • Deprecated… does it still work? – neverMind9 Aug 28 '18 at 16:21
  • 4
    +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
  • 1
    @comfreak Works for me as well, actually. – neverMind9 Jan 16 '19 at 1:28
  • 1
    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 6 '19 at 15:40
70

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
29

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 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 7 '18 at 1:11
28

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

19

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
18

Maybe you can try:

cat /proc/acpi/battery/BAT0/state

cat /proc/acpi/battery/BAT0/info

  • 23
    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 8:34
14

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

  • 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 8 '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 0:22
  • @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 2:19
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.

  • +1 from me! CLI FTW. If you have 2 battery's change BAT0 for BAT1 :) – Rinzwind Jun 10 '11 at 7:31
  • Is discourage since 2.6.24, we should use /sys/class/power_supply/BAT0/ – Pablo Bianchi Feb 26 '19 at 22:35
9

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
6

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.

5

This did the job for me in ubuntu 14.04:

cat /sys/class/power_supply/BAT0/capacity
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)

  • 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
1

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"
1

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

We can echo just the percentage with that command

upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage" | awk '/perc/{print $2}'

65%

in case you need to extract that value

0

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.

0

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
-4
cat /proc/acpi/ac_adapter/AC/state
  • 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

Not the answer you're looking for? Browse other questions tagged or ask your own question.