Depending on the desktop environment of the Linux distribution we are using, we may or may not have a battery status indicator on the desktop. Sometimes, we may have to check the battery status using the command line.
In this tutorial, we’ll look at some ways to check the battery status (charging status and power percentage) using commands.
2. Using upower
upower is a command-line client for the UPower daemon, which is responsible for system-wide power management on most Linux distributions. Before we use this command to obtain the information about the battery, we need to figure out the path for the connected battery. This can be done using upower -e or upower –enumerate:
$ upower -e /org/freedesktop/UPower/devices/line_power_AC /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/DisplayDevice
The second line, where the device name starts with “battery..”, is the one we are looking for. It’s usually battery_BAT0 or battery_BAT1, depending on the distribution we’re using.
Once we have this path, we can proceed to get detailed information about the battery using upower -i:
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0 native-path: BAT0 vendor: LGC-LGC3.0 model: DELL 49VTP27 serial: 14057 power supply: yes updated: Monday 18 April 2022 07:45:28 AM (105 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: charging warning-level: none energy: 53.5464 Wh energy-empty: 0 Wh energy-full: 57.3981 Wh energy-full-design: 48.84 Wh energy-rate: 2.4531 W voltage: 12.564 V time to full: 1.6 hours percentage: 93% capacity: 100% technology: lithium-ion icon-name: 'battery-full-charging-symbolic' History (rate): 1650248128 2.453 charging
Needless to say, we can use grep or other commands to process the output into a format we need:
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | grep -o "[0-9]*" 93 $ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state | cut -d ':' -f2 | xargs charging
These days, most devices have only a single battery, so we can also use the upower command with the -d parameter. This essentially prints information for all the connected devices:
$ upower -d Device: /org/freedesktop/UPower/devices/line_power_AC native-path: AC power supply: yes updated: Thursday 21 April 2022 07:42:11 AM (658 seconds ago) has history: no has statistics: no line-power warning-level: none online: yes icon-name: 'ac-adapter-symbolic' Device: /org/freedesktop/UPower/devices/battery_BAT0 native-path: BAT0 vendor: LGC-LGC3.0 model: DELL 49VTP27 serial: 14057 power supply: yes updated: Thursday 21 April 2022 07:52:12 AM (57 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: charging warning-level: none energy: 48.507 Wh energy-empty: 0 Wh energy-full: 57.3981 Wh energy-full-design: 48.84 Wh energy-rate: 7.1262 W voltage: 12.544 V time to full: 1.2 hours percentage: 93% capacity: 100% technology: lithium-ion icon-name: 'battery-full-charging-symbolic' History (rate): 1650507732 7.126 charging ....more info
This command is equivalent to running upower -e, followed by upower -i for each device, and thus saves us one step in the process.
3. Using the /sys/class/power_supply Directory
The Linux kernel exposes various information about the system and connected hardware devices in a read-only filesystem known as sysfs. We can access this file system using the /sys directory. We can find the battery device directories under the /sys/class/power_supply directory using the ls command:
$ ls /sys/class/power_supply/ AC BAT0
BAT0 is the directory we are looking for. It’s usually BAT0 or BAT1, depending on the Linux distribution we’re using. Next, we can get various information about the battery from files inside the directory. We could start with listing files to see what files are present:
ls /sys/class/power_supply/BAT0 alarm charge_full_design device power subsystem voltage_min_design capacity charge_now hwmon2 present technology voltage_now capacity_level current_now manufacturer serial_number type charge_full cycle_count model_name status uevent
Now, we can read the contents of the corresponding files to get the required data:
$ cat /sys/class/power_supply/BAT0/capacity 100 $ cat /sys/class/power_supply/BAT0/status Full
In the above snippet, capacity gives us the percentage of charge in the battery and status tells us whether it is charging or discharging.
In this article, we looked at two different methods to get information about battery status using the command line.
Using the upower command, we’re able to print a detailed output about the battery status using one or two commands.
The information can also be accessed using the files in the /sys/class/power_supply/BAT0/ (or BAT1) directory. The information here is very raw and discrete, without any formatting. So, we can directly use the data in bash scripts if we need to.