16

Sometimes my charger remains plugged into laptop even after charging is complete.

Is there a way to get a pop-up message/notification when my battery gets full due to charging or is there any software/package which can provide the functionality?

1
  • From what I noticed, the battery has a longer life if you always leave the note plugged, only unplug when it's really necessary – danilo Aug 5 '20 at 16:45
7

Install the acpi package. Now put this in return0whencharging.sh and make it executable:

#!/bin/sh
acpi -V
if cat /proc/acpi/battery/BAT1/state | grep "charging state" | grep -vE ":[\t ]*charging$"; then
    exit 1
else
    exit 0
fi

If echo -e "\a" makes a sound, start this when you want to watch the battery status:

watch --beep return0whencharging.sh

If it doesn't make any sound or you want a notification and a better alarm than whatever watch can provide, install libnotify-bin and mpv and use this instead:

while return0whencharging.sh; do sleep 1; done; notify-send "Finished charging" && mpv -loop /usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga

Explanation:

If you look at the man page for grep you can see that -v reverses the matching, and therefore the return/status code. -E means it's a regular expression. the [\t ] in the regex (regular expression) means "tab or space". The following star makes it mean "tab or space 0 or more times". The trailing "$" means that it should match the end of the line. The final grep means that lines NOT ending in a ":", any number of tabs or spaces and then "charging" and the end of the line should make grep exit with status code 0. This means that grep will return 1 as long as the computer is charging. The if will execute it's first branch when the status code is 0, which means we are effectively negating the result of grep, since we exit 1 when grep exits 0 and exit 0 when grep exists non-zero.

5
  • if you want these commands explained, just ask me – Janus Troelsen Jul 31 '12 at 20:06
  • i m not sure what this grep -vE ":[\t ]*charging$" will do. Could you please explain the commands. thanks – Ankit Aug 1 '12 at 6:00
  • added explanation – Janus Troelsen Aug 1 '12 at 11:02
  • And where is this return0whencharging.sh file? Or if I create it, is there a specific place I have to save it? – Parto Feb 14 '14 at 15:32
  • @AvatarParto: doesn't matter where. name doesn't matter either, as long as you change it everywhere – Janus Troelsen Feb 15 '14 at 1:38
9

I have written a small script that will do that:

screenshot


Script:

#!/usr/bin/env bash
while true
do
    export DISPLAY=:0.0
    battery_percent=$(acpi -b | grep -P -o '[0-9]+(?=%)')
    if on_ac_power; then
        if [ "$battery_percent" -gt 95 ]; then
            notify-send -i "$PWD/batteryfull.png" "Battery full." "Level: ${battery_percent}% "
        fi
    fi
    sleep 300 # (5 minutes)
done

Installation:

Run:

sudo apt-get install acpi
git clone https://github.com/hg8/battery-full-notification.git
cd battery-full-notification/
chmod +x batteryfull.sh

Copy the script to ~/bin folder (why the ~/bin folder?) :

cp batteryfull.* ~/bin

Or copy it to /usr/local/bin if you want it to be available for all users on your computer:

cp batteryfull.* /usr/local/bin

Then add batteryfull.sh script as a startup application by:

  • Open Dash
  • Search for Startup Applications
  • Double-click the icon
  • Click Add and fill in as follows:

    startup application batteryfull

1

Here is the Crontab that I use

  1. Notify if battery is full (equal to 100%)

    */1 * * * * if [ $(cat /sys/class/power_supply/BAT0/capacity) -eq 100 ]; then XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "Battery Full"; fi
    
  2. Notify if battery is low (less than or equal to 10%)

    */1 * * * * if [ $(cat /sys/class/power_supply/BAT0/capacity) -le 10 ]; then XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "Battery Low"; fi
    

Example Notification Image:

Example Notification Image

0

I was looking for the same thing and found this extension and it works as expected.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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