This happens to me more than I'd like to admit, but sometimes I don't notice the power getting low since it only shows up in my status bar, then the computer just quits. I'd like a big alert that warns me before this happens. Is there any way for it to alert me? Ubuntu has a nice popup that tells you it's getting low.

  • Configure the power-manager from your desktop environment to do "something" - this can usually range from "nothing", over "run a command", to "hibernate"/"power off".
    – peterph
    Commented Jan 9, 2013 at 19:33
  • Which desktop environment?
    – Renan
    Commented Jan 10, 2013 at 0:17
  • 2
    @peterph I only have the "Power off" and "Hibernate" options. Commented Jan 10, 2013 at 2:22
  • @Renan running Cinnamon. Commented Jan 10, 2013 at 2:23
  • @TravisR sorry, I meant to say configure the behaviour when critical battery level is reached
    – peterph
    Commented Jan 10, 2013 at 8:33

13 Answers 13


write a script!

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -le 10 ]
    notify-send "Battery low" "Battery level is ${battery_level}%!"

then cron it to run every few minutes or so. But yeah, if you can do it through the GUI, that's probably a much better way of doing it.

  • This method has the advantage that it will apply to just about any distro/desktop environment combination with a little tweaking.
    – Perkins
    Commented Oct 22, 2015 at 16:53
  • The best way I've found to 'do it through the GUI' in my Cinnamon environment is to add an applet to a panel: unix.stackexchange.com/a/353505/37552 Commented Mar 24, 2017 at 6:59

re: hdgarrood 's answer, setting cron to run notify-send actually turned out to be painfully finicky. (I think crontab -e does persist across reboots by default, fortunately). I followed several guides, I'm not sure what exactly fixed it in the end, but here is my full setup for running the checker every 5 minutes:

$ crontab -e

*/5 * * * * sh /home/nrw/.notify-send_setup
*/5 * * * * sh /home/nrw/.battnotif

$ cat .notify-send_setup

touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus

exit 0

$ cat .battnotif

export DISPLAY=:0

if [ -r "$HOME/.dbus/Xdbus" ]; then
    . "$HOME/.dbus/Xdbus"

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`

# I tried to only notify when not charging, but could not get it to work
# STATUS=$(cat /sys/class/power_supply/ADP1/online)
# if [ $battery_level -le 15 ] && [ $STATUS == "0" ]

if [ $battery_level -le 15 ]
    /usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
    echo 'batt low' >> /home/nrw/cron.log

echo 'ran batt' >> /home/nrw/cron.log

Make sure to chmod +x the bash scripts.


With the help of all the information from all the answers here I created a script and put it in a repository on GitLab.

It'll show notifications when:

  • Your cable is unplugged and the battery goes below 30%
  • Your cable is plugged and the battery goes above 80%


Contributions to make it work on a wider range of environments are very welcome.

The script at time of writing this:


# Run this script as a cronjob every 5 minutes or so, to get notifications when
# battery percentage goes below 30% or above 80%.
# Cronjob line example:
# */5 * * * * /bin/bash /path/to/battery_health_notifications.sh

# This line is to make notify-send always work, also when run in a crontab.
# https://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab/346580#346580
export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '\0' '\n')

BATTERY_PATH=$(upower -e | grep battery)
LINE_POWER_PATH=$(upower -e | grep line_power)
BATTERY_PERCENTAGE=$(upower -i $BATTERY_PATH | grep 'percentage:' | awk '{ print $2 }' | sed 's/%//')
CABLE_PLUGGED=$(upower -i $LINE_POWER_PATH | grep -A2 'line-power' | grep online | awk '{ print $2 }')

if [[ $CABLE_PLUGGED == 'yes' ]]; then

    if [[ $BATTERY_PERCENTAGE -gt 80 ]]; then
        notify-send --urgency=critical "Battery optimization" "Battery reached 80%, unplug the power cable to optimize battery life."


    if [[ $BATTERY_PERCENTAGE -lt 30 ]]; then
        notify-send --urgency=critical "Battery optimization" "Battery is below 30%, plug in the power cable to optimize battery life."


I do now run the following:

$ crontab -e
*/5 * * * * /home/<my username>/bin/checkLowBattery
$ cat /home/<my username>/bin/checkLowBattery

POWERSUPPLY="/sys/class/power_supply/ACAD/online" # could be different on your system!
TOO_LOW=20 # how low is too low?
ICON="/usr/share/icons/ubuntu-mono-dark/status/24/battery-low.svg" # eye candy

export DISPLAY=:0

BATTERY_LEVEL=$(acpi -b | grep -P -o '[0-9]+(?=%)')

    /usr/bin/notify-send -u critical -i "$ICON" -t 3000 "Battery low" "Battery level is ${BATTERY_LEVEL}%!"

exit 0

As you can see this is just orangenarwhals code with some changes:

  • no dbus trickery, somehow I didn't need it
  • put some "constants" into variables at the beginning of code
  • implemented warnings only when battery is not charging (take a look at man test, it explains how to do ANDs, among other things.)
  • added icon (find some candidates on your system with something like: $ find /usr/share/icons/ -iname "*batt*low*")
  • expiry-time in milliseconds

don't forget to chmod +x your scripts, you can then run them directly from cron(tab), no need for sh.

(This works on Ubuntu using Xmonad.)


Since you're apparently running Cinnamon, just install Battery Applet with Monitoring and Shutdown (BAMS).

Right-click on a panel → + Add Applets to the PanelAvailable applets (online), type 'BAMS' in the search widget, and install and configure it.

It's not the flashiest, but so far it's already alerted me when I had my laptop unwittingly unplugged.


Minor twist - on Knoppix (granted, not Mint as used by OP) notify-send wasn't available (libnotify-bin package is not installed), so instead I found this useful for the alert:

xmessage Battery low & mplayer /usr/lib/libreoffice/share/gallery/sounds/beam.wav

I just threw that into the Alarm Command of the Battery Monitor panel of LXDE, no need for a script.

That assumes you have LibreOffice installed, but that .wav makes a nice low power sound. There are practically no .ogg's on Knoppix.

  • 1
    one might also have nicer zenity instead of xmesssage and aplay instead of mplayer Commented Jan 11, 2017 at 19:02

This simple one works nicely for me, with just simple acpi package needed to be installed (no deamons, specific desktop enviroments or the like).

In your user crontab (crontab -e) put the following (all in one line, it is split for readability here):

*/3 * * * * acpi --battery | 
    awk -F, '/Discharging/ { if (int($2) < 15) print }' | xargs -ri 
    env DISPLAY=:0 zenity --warning --text "battery low\n{}"

What it does is check battery level (acpi --battery) and if you're not connected to charger (/Discharging/) and if battery is < 15%, it will every 3 minutes (*/3) display message via zenity to bug you.

Instead of zenity you could instead use xmessage (on really spartan machine) or even something like aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wav for audio notifications (which have advantage that it will won't interrupt your keyboard typing, and will work even for multi-user laptops with multiple sessions, where DISPLAY=:0 hack would fail)

If you also need to suspend/hibernate machine on certain critical level, see this answer


I had that same problem and I figured out a workaround. I installed from Linux Mint repositories an app called GKrellM. It monitors lots of stuff on your machine and there is battery. Setup with alarms, it works for me like a charm.

more info at:


  • GKrellM didn't work for me. It is too old and the notification system doesn't work properly.
    – Bemipefe
    Commented Sep 3, 2015 at 10:18

The issue is related at KDE environment. I have the same problem with MintMAYA KDE_version. When I worked with Mint9_Gnome a very useful pop-up appeared when a certain level of low-power was reached (auto-configured out_of_the_box on fresh installs). Very very annoying being shutted down without advice and no help founded even googling a lot :(


I have the same issue and it's really frustrating. I solved by using the BatteryAlert.sh script:


BATTERY=$(upower -e | grep 'BAT')

while :
    BATTERY_PERCENTAGE=$(upower -i $BATTERY|grep percentage|awk '{ print $2 }'|sed s/'%'/''/g)
    CABLE=$(upower -d | grep -n2 line-power | grep online | awk '{ print $3 }')

    if [[ "$BATTERY_PERCENTAGE" -lt "10" && $CABLE = "no" ]]; then

        notify-send --urgency=critical "WARNING: Battery is about to die"  "Plug in the power cable"
        play /usr/share/sounds/KDE-Sys-Warning.ogg &> /dev/null 

sleep 10


I'm using KDE but you can use it with every desktop environment. You don't have to run this as root user or go crazy with crontab syntax. You need only to change the notification sound if you want a sound alert. If you wan't to start the script automatically when the desktop environment starts put the script in $USER/bin folder with the BatteryAlertLauncher.sh script:


function getRunningProcesses 
    ps -aux | grep -v grep | grep BatteryAlert.sh

if [[ -n "$(getRunningProcesses)" ]] ; then


Make sure that they are executable:

chmod u+x $USER/bin/BatteryAlert*

Then just run the following command:

ln -s /home/$(USER)/bin/BatteryAlertLauncher.sh .config/autostart/

You can also run the alert script manually from bash by entering this command:


As I don't have Gnome Shell or Cinnamon installed, I cannot be of direct help as accessing the source could would be much practical since it's rather easy adding such a rudimentary extension with JavaScript.

You should open :


and search for percentageText - subsequently, you ought to be able to add a pop-up message or alert.

  • Interesting, didn't know this stuff is in javascript. But no /status directory and no power.js I can find anywhere in the /cinnamon/js directories. Commented Jan 12, 2013 at 18:09
  • Have you tried to search for it from root using : find / -type f -name power.js Commented Jan 13, 2013 at 14:32
  • Ran that, nothing found. Commented Jan 14, 2013 at 22:46

This is how I did it on my Arch linux with Gnome as DE:


eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`

STATUS=$(cat /sys/class/power_supply/ACAD/online)
if [ $battery_level -le 15 ] && [ $STATUS == "0" ]
    /usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"

The word ACAD in STATUS=$(cat /sys/class/power_supply/ACAD/online) will change depending on the laptop make. It is used to find if your lap is plugged in to a AC ADapter or not. Here is how my crontab looks like:

* * * * * bash <path to script>

Don't forget to make the script executable with chmod u+x <path to script>


Download an applet called BAMS . It will alert you automatically when the battery reaches a certain level decided by you . It is the simplest solution.

  • I can't find this as an apt package. To which applet are you referring? Commented Oct 27, 2020 at 17:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .