Het is erg belangrijk om de batterij van een laptop in de gaten te houden om de levensduur ervan te verlengen en om te voorkomen dat je onverwachts wordt geconfronteerd met een plotselinge uitschakeling. Als je Linux gebruikt, kun je de batterijstatus van een laptop eenvoudig monitoren en meldingen ontvangen wanneer de batterij volledig is opgeladen of bijna leeg is, met behulp van een eenvoudig Bash-script genaamd battmon.
Als je een laptopbatterij te lang oplaadt, kan dit de levensduur van de batterij in de loop van de tijd verkorten. Als je de batterij te lang leeg laat lopen, kan dit leiden tot een onverwachte uitschakeling of sluimerstand, waardoor mogelijk gegevens verloren gaan.
Door meldingen in te stellen wanneer de batterij een bepaald laadpercentage bereikt (bijvoorbeeld 95%), kun je een apparaat loskoppelen om overladen te voorkomen. Op dezelfde manier herinneren waarschuwingen bij een kritiek lage batterijspanning (bijvoorbeeld 10%) je eraan om de oplader aan te sluiten voordat het systeem uitgeschakeld wordt.
Battmon is een eenvoudig maar effectief script voor het monitoren van de batterijstatus in Linux. Het controleert automatisch de batterijstatus en stuurt meldingen naar de desktop wanneer:
Uiteraard kun je het percentage van de batterijstatus naar wens aanpassen.
Battmon gebruikt ACPI om informatie over de batterij op te halen en stuurt notificaties naar Notify-send om meldingen op het bureaublad weer te geven.
Alle acties worden in /tmp/battmon.log bijgehouden voor eenvoudige probleemoplossing.
Je kunt het script in de achtergrond uitvoeren met een cronjob, zodat je altijd tijdige meldingen ontvangt zonder zelf de status van de batterij te hoeven controleren.
Battmon is een volledig gratis script dat in Bash is geschreven.
Zoals reeds vermeld, gebruikt het battmon-script de acpi opdracht om het batterijniveau te controleren en notify-send om een melding op het bureaublad weer te geven wanneer de batterij volledig is opgeladen of bijna leeg is.
Installeer dus eerst deze hulpmiddelen. Als je een systeem gebruikt dat gebaseerd is op Debian, voer dan het volgende opdracht uit in een terminal:
dany@pindabook:~$ sudo apt install acpi libnotify-bin
[sudo] wachtwoord voor dany:
Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:
linux-image-6.12.86+deb13-amd64
Gebruik 'sudo apt autoremove' om het te verwijderen.
Installeren:
acpi libnotify-bin
Samenvatting:
Opwaarderen: 0, Installeren: 2, Verwijderen: 0, Niet opwaarderen: 0
Downloadgrootte: 26,2 kB
Benodigde ruimte: 96,3 kB / 84,4 GB beschikbaar
Ophalen:1 http://deb.debian.org/debian trixie/main amd64 acpi amd64 1.8-1 [13,4 kB]
Ophalen:2 http://deb.debian.org/debian trixie/main amd64 libnotify-bin amd64 0.8.6-1 [12,8 kB]
26,2 kB opgehaald in 0s (738 kB/s)
Voorheen niet geselecteerd pakket acpi wordt geselecteerd.
(Database wordt ingelezen ... 211797 bestanden en mappen momenteel geïnstalleerd.)
Uitpakken van .../archives/acpi_1.8-1_amd64.deb wordt voorbereid...
Bezig met uitpakken van acpi (1.8-1) ...
Voorheen niet geselecteerd pakket libnotify-bin wordt geselecteerd.
Uitpakken van .../libnotify-bin_0.8.6-1_amd64.deb wordt voorbereid...
Bezig met uitpakken van libnotify-bin (0.8.6-1) ...
Instellen van acpi (1.8-1) ...
Instellen van libnotify-bin (0.8.6-1) ...
Bezig met afhandelen van triggers voor man-db (2.13.1-1) ...
Maak met een teksteditor (bijvoorbeeld nano) het script aan:
dany@pindabook:~$ nano battmon.sh
Met de volgende inhoud:
#!/usr/bin/env bash
# ------------------------------------------------------------------
# Script Name: battmon.sh
# Description: A Simple Bash Script for Battery Level Charge
# Notifications
# Website: https://gist.github.com/ostechnix
# Debugged by: Dany Pinoy
# ------------------------------------------------------------------
# Define thresholds
HIGH_THRESHOLD=80
LOW_THRESHOLD=10
LOGFILE="/tmp/battmon.log"
# Get the battery level
LEVEL=$(acpi -b | awk -F', ' '{print $2}' | tr -d '%,')
# Ensure LEVEL is a valid number
if [[ "$LEVEL" =~ ^[0-9]+$ ]]; then
# Check for high battery level
if [ "$LEVEL" -ge "$HIGH_THRESHOLD" ]; then
echo "$(date) - Battery at $LEVEL%. Sending high battery notification..." >> "$LOGFILE"
DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 notify-send -t 0 "Battery Full" "Your battery is now fully charged." >> "$LOGFILE" 2>&1
fi
# Check for low battery level
if [ "$LEVEL" -le "$LOW_THRESHOLD" ]; then
echo "$(date) - Battery at $LEVEL%. Sending low battery warning..." >> "$LOGFILE"
DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 notify-send -t 0 "Battery Low" "Your battery is critically low. Please plug in your charger!" >> "$LOGFILE"
fi
fi
Sla het script op met de sneltoets Ctrl+s en verlaat de nano teksteditor met Ctrl+x.
Na het opslaan van het bestand moet je het uitvoerbaar maken zodat je het als script kunt uitvoeren. Gebruik de volgende opdracht:
dany@pindabook:~$ chmod +x battmon.sh
Om het script gemakkelijk vanuit elke map in de terminal te kunnen gebruiken, verplaatst je het naar een map die in de PATH-lijst van het systeem is opgenomen.
De map /usr/local/bin is een veelgebruikte keuze:
dany@pindabook:~$ sudo mv battmon.sh /usr/local/bin/battmon
Je wilt dat het script automatisch en op regelmatige tijdstippen wordt uitgevoerd. Daarvoor kun je gebruikmaken van cron-taken.
Met een cron-taak kun je het script instellen om elke 5 minuten te worden uitgevoerd, zodat je altijd op de hoogte bent van de status van de batterij.
Om de cron-taak in te stellen, voer je de volgende opdracht uit:
dany@pindabook:~$ crontab -e
no crontab for dany - using an empty one
Select an editor. To change later, run select-editor again.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
Choose 1-2 [1]: 1
Deze keuzemogelijkheid krijg je enkel bij de eerste start.
We kiezen voor de eenvoudigste teksteditor nano door 1 in te geven en Return te drukken.
Voeg de volgende regel toe:
*/5 * * * * /usr/local/bin/battmon >> /tmp/battmon.log 2>&1
In deze regel wordt cron opgedragen het script elke 5 minuten uit te voeren en de uitvoer in /tmp/battmon.log te loggen.
Vervang indien nodig /usr/local/bin/battmon door de juiste padnaam van het script.
Nu zal het script continu in de achtergrond draaien en elke 5 minuten de batterijstatus controleren. Als de batterij 80% bereikt, word je automatisch gewaarschuwd. Je kunt dan de oplaadkabel loskoppelen.
Het battmon-script waarschuw je ook wanneer de batterijspanning kritiek laag is (onder de 10%), zodat je de stroomkabel kunt aansluiten en systeemonderbrekingen kunt voorkomen.
Om het script vlotter te testen vervang je in de cron regel 5 door 1, waardoor het script elke minuut wordt uitgevoerd.
Sla de cron-taken op met de sneltoets Ctrl+s en verlaat de nano teksteditor met Ctrl+x.
Daar we het battmon script verplaatst hebben, kunnen we het met beheerdersrechten aanpassen met de volgende opdracht:
dany@pindabook:~$ sudo nano /usr/local/bin/battmon
Om een laden onderbreken melding te krijgen met een batterij die 43% geladen is pas je de volgende variabelen aan:
HIGH_THRESHOLD=40 LOW_THRESHOLD=30
Sla het script op en na maximaal 1 minuut krijg je een melding:

De batterij is namelijk meer opgeladen dan de in HIGH_THRESHOLD opgegeven waarde.
De LOW_THRESHOLD moet steeds lager zijn dan HIGH_THRESHOLD.
Om een laden starten melding te testen met eenzelfde batterijlading van 43 % moeten beide variabelen hoger zijn dan de batterijlading:
HIGH_THRESHOLD=60 LOW_THRESHOLD=50

Op mijn laptop gebruik ik de volgende waarden:
HIGH_THRESHOLD=80 LOW_THRESHOLD=40
Vergeet ook niet om de cron-taak aan te passen om het script terug om de 5 minuten uit te voeren.
Als je problemen wilt oplossen of de geschiedenis van meldingen wilt controleren, kun je het logbestand bekijken. Het logbestand bevat vermeldingen wanneer er een melding werd verzonden:
dany@pindabook:~$ cat /tmp/battmon.log
zo 31 mei 2026 16:20:01 CEST - Battery at 43%. Sending high battery notification...
zo 31 mei 2026 16:21:01 CEST - Battery at 43%. Sending high battery notification...
zo 31 mei 2026 16:22:01 CEST - Battery at 42%. Sending high battery notification...
zo 31 mei 2026 16:23:02 CEST - Battery at 42%. Sending low battery warning...
zo 31 mei 2026 16:24:01 CEST - Battery at 42%. Sending low battery warning...
zo 31 mei 2026 16:25:01 CEST - Battery at 41%. Sending low battery warning...
zo 31 mei 2026 16:30:01 CEST - Battery at 40%. Sending low battery warning...
Om de logboek-melding in realtime te volgen kan je de volgende opdracht gebruiken:
dany@pindabook:~$ tail -f /tmp/battmon.log
zo 31 mei 2026 16:20:01 CEST - Battery at 43%. Sending high battery notification...
zo 31 mei 2026 16:21:01 CEST - Battery at 43%. Sending high battery notification...
zo 31 mei 2026 16:22:01 CEST - Battery at 42%. Sending high battery notification...
zo 31 mei 2026 16:23:02 CEST - Battery at 42%. Sending low battery warning...
zo 31 mei 2026 16:24:01 CEST - Battery at 42%. Sending low battery warning...
zo 31 mei 2026 16:25:01 CEST - Battery at 41%. Sending low battery warning...
zo 31 mei 2026 16:30:01 CEST - Battery at 40%. Sending low battery warning...
zo 31 mei 2026 16:35:01 CEST - Battery at 38%. Sending low battery warning...
^C
Deze opdracht kan je afsluiten met de sneltoets Ctrl+c.
Het battmon script werkt, maar vertoont wat schoonheidsfoutjes. Zo blijft het script meldingen tonen tot de batterij een lading bereikt die tussen de twee ingestelde waarden staat.

Zelf als je het laden volgens de gekregen melding hebt gestart of gestopt. Dit kan je oplossen door niet enkel de batterijlading op te vragen, maar ook of de batterij aan het laden is. Zodat je de meldingen alleen weergeeft als er nog geen actie is ondernomen.
dany@pindabook:~$ acpi -b
Battery 0: Charging, 45%, 00:48:02 until charged
Je kan het script ook uitbreiden door de meldingen te begeleiden met bijhorende geluiden.
Hieronder nog de mogelijkheden van de notify-send opdracht:
dany@pindabook:~$ notify-send --help
Gebruik:
notify-send [OPTIE…] <SUMMARY> [BODY] - create a notification
Hulpopties:
-?, --help Deze hulptekst tonen
Programmaopties:
-u, --urgency=LEVEL Specifies the urgency level (low, normal, critical).
-t, --expire-time=TIME Specifies the timeout in milliseconds at which to expire the notification.
-a, --app-name=APP_NAME Specifies the app name for the notification
-i, --icon=ICON Specifies an icon filename or stock icon to display.
-c, --category=TYPE[,TYPE...] Specifies the notification category.
-e, --transient Create a transient notification
-h, --hint=TYPE:NAME:VALUE Specifies basic extra data to pass. Valid types are boolean, int, double, string, b
yte and variant.
-p, --print-id Print the notification ID.
-r, --replace-id=REPLACE_ID The ID of the notification to replace.
-w, --wait Wait for the notification to be closed before exiting.
-A, --action=[NAME=]Text... Specifies the actions to display to the user. Implies --wait to wait for user input
. May be set multiple times. The name of the action is output to stdout. If NAME is not specified, the numerical index
of the option is used (starting with 0).
-v, --version Version of the package.
Zo kan je bijvoorbeeld de --expire-time optie gebruiken om de meldingen na een tijdje automatisch te af te sluiten.
dany@pindabook:~$ crontab -e
*/5 * * * * /usr/local/bin/battmon >> /tmp/battmon.log 2>&1Sla de aanpassing op met de sneltoets Ctrl+s en verlaat de nano teksteditor met Ctrl+x.
dany@pindabook:~$ sudo apt remove acpi libnotify-bin
[sudo] wachtwoord voor dany:
VERWIJDEREN:
acpi libnotify-bin
Samenvatting:
Opwaarderen: 0, Installeren: 0, Verwijderen: 2, Niet opwaarderen: 0
Vrijgemaakte ruimte: 96,3 kB
Doorgaan? [J/n]
(Database wordt ingelezen ... 206740 bestanden en mappen momenteel geïnstalleerd.)
acpi (1.8-1) wordt verwijderd ...
libnotify-bin (0.8.6-1) wordt verwijderd ...
Bezig met afhandelen van triggers voor man-db (2.13.1-1) ...
dany@pindabook:~$ sudo apt autoremove
Samenvatting:
Opwaarderen: 0, Installeren: 0, Verwijderen: 0, Niet opwaarderen: 0
dany@pindabook:~$ sudo rm /usr/local/bin/battmon