BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

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.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
Comments (3)  Permalink

Leere Verzeichnisse und alte Symlinks löschen

Mit der Zeit können sich auf einem System leere Verzeichnisse und symbolische Links, die auf nicht mehr existierende Dateien verweisen, ansammeln. Mit cleanlinks(1) können diese automatisch gelöscht werden. cleanlinks sucht im aktuellen Verzeichnis nach solchen Daten und durchsucht auch rekursiv alle Unterverzeichnisse und löscht sie.

Beispiel:

# mkdir /tmp/test
# cd /tmp/test/
# mkdir leer
# mkdir voll
# touch voll/datei
# ln -s a b
# ln -s voll/datei hallo
# pwd
/tmp/test
# ls -l
total 4
lrwxr-xr-x 1 beat wheel 1 27 Mai 09:59 b@ -> a
lrwxr-xr-x 1 beat wheel 10 27 Mai 09:59 hallo@ -> voll/datei
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 leer/
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 voll/

Im Verzeichnis /tmp/test existiert nun ein leeres Verzeichnis leer und ein Symlink b, der auf eine nicht existierende Datei a verweist.  Führen wir nun cleanlinks in diesem Verzeichnis test aus:

# cleanlinks 
./b is a dangling symlink, removing
Removing empty directories ...
./leer
# ls -l
total 2
lrwxr-xr-x 1 beat wheel 10 27 Mai 09:59 hallo@ -> voll/datei
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 voll/

cleanlinks ist Teil der XFree86 und X.Org Projekte. Auf FreeBSD befindet sich cleanlinks im imake Port.

 Permalink
1-2/2