FreeBSD automatisch herunterfahren, wenn Batterie leer ist
Nachdem mir zweimal der Laptop abgestellt ist, ohne sauber herunterzufahren, da die Batterie leer war, habe ich mich auf die Suchen nach einer Lösung gemacht, jedoch nur Lösungen mit Shellscripts/Cron gefunden, die ich nicht so schön fand. Also habe ich einen Patch für powerd(8) geschrieben. Es stellte sich aber heraus, dass dies mit devd(8) schon möglich ist. Also noch devd in die Googlesuche miteinbezogen und siehe da, das gibt es schon.
Einfach Folgendes mit root-Rechten ausführen:
# fetch -o /etc/rc.d/battery http://www.lestinsky.de/michael/scripts/battery.sh && chmod +x /etc/rc.d/battery
Danach folgende Zeilen in der /etc/devd.conf einfügen:
# Warnings and emergency shutdown if battery is running low.
notify 10 {
match "system" "ACPI";
match "subsystem" "CMBAT";
action "/etc/rc.d/battery";
};
Falls dies noch nicht der Fall ist, muss devd noch in der /etc/rc.conf eingetragen werden:
devd_enable="YES"
Ist der Batteriestand niedrig, wird eine Warnung an die Benutzer mittels wall(1) gesendet und wenn man darauf nicht reagiert, bzw. den Laptop an den Strom hängt, wird das System automatisch heruntergefahren.
Da jedoch mein IBM T42 den ACPI Batteriestatus nicht korrekt zurückmeldet, habe ich oben genanntes Skript angepasst, dass es bei 5% Batteriestand eine Warnung ausgibt, 60 Sekunden wartet und falls dann der Akku nicht wieder geladen wird, das System herunterfährt. Das angepasste devd-Skript ist hier verfügbar.
Comments
Habs mal übernommen. Beim T40p wird der Batteriestatus doch richtig angezeigt? Weisst du das vielleicht?
Wie hast du bemerkt, das bei dir der Batteriestand falsch angezeigt wurde?
Weiss es nicht wies beim T40p ist. Mit
sysctl -n hw.acpi.battery.state
kannst Du den Status der Batterie abfragen. Unglücklicherweise wechselt mein T42 auch bei sehr niedrigem Batteriestand nie auf 5 (LOW) oder 4 (CRITICAL), so dass ich das unter http://www.lestinsky.de/michael/scripts/battery.sh gefundene Skript nicht so übernehmen konnte. Mein T42 meldet nur 1 (DISCHARG) und 2 (CHARGING) zurück. Ich musste daher das Skript ein wenig an diese Umstände anpassen.
Ich werds mal testen. Zurzeit meldet es bei mir nur 0 (mit Netzteil) und 1 (ohne Netzteil). Aber die Batterie ist auch komplett geladen.
Danke.