Simple linear command:
[[ $(acpi -b | grep -o "Discharging") ]] && notify-send "Alert" "Battery is not charging.\n Please plug your AC adapter!"
From man acpi
we have:
NAME
acpi - Shows battery status and other ACPI information
SYNOPSIS
acpi [options]
DESCRIPTION
acpi Shows information from the /proc or the /sys filesystem, such as battery status or thermal information.
OPTIONS
-b | --battery
show battery information
If you run acpi -b
and you battery is charging mode, you will get this result of that:
Battery 0: Charging, 88%, 00:38:17 until charged
And if your battery isn't charging then the result would be like this:
Battery 0: Discharging, 87%, 03:46:06 remaining
Then We are looking "Discharging" in the result with this command:
acpi -b | grep -o "Discharging"
If battery was not in charging the result will "Discharging".
And finally we send an alert to notification if we got "Discharging" from above command:
[[ $(acpi -b | grep -o "Discharging") ]] && notify-send "Alert" "Battery is not charging.\n Please plug your AC adapter!"
Note: [[ Something ]]
always true and [[ ! Something ]]
always false.
Now it's easiest way that we run it in the background, inside a while loop. Then I put the command into a while loop and I check the battery status between X interval of time. Like this:
while true
do
# Our command
sleep [number of seconds] # check the status every [number of seconds] seconds
done
And if you want to run the script on startup and every 5 minutes, so the construction would be:
- Save the script(I named it
ChkCharge.sh
in my home directory)
- Add a line in
/etc/rc.local
to call your script (your ChkCharge.sh
) + "&" to make it exit. like bash /home/USERNAME/ChkCharge.sh &
.
Final Script
#!/bin/bash
while true
do
[[ $(acpi -b | grep -o "Discharging") ]] && notify-send "Alert" "Battery is not charging.\n Please plug your AC adapter!"
sleep 300 # 300 seconds or 5 minutes
done
Finish. Reboot and see the magic ;)