La batteria della nostra Debian-Box

Il pc si spegneva (senza fare uno shutdown normale) una volta che la batteria si esauriva completamente, per risolvere questo inconveniente ho messo su un modo credo un po' grezzo ma funziona e non conoscendone altri e' quello che utilizzo.
Script bash che visualizza la percentuale di carica della batteria, lo script e' stato creato da me quindi non sara' sicuramente scritto in maniera perfetta anche perche' non ne so molto di bash scripting, se avete delle correzioni da suggerire fatelo pure:
#Inizio file battery Creato da Lord_Dex
#!/bin/bash
if [ ` cat /proc/acpi/battery/BAT1/state | grep present: | cut -d\  -f18` = "yes" ]; then {
        TOTALE=`cat /proc/acpi/battery/BAT1/info | grep last\ full\ capacity: | cut -d\  -f9`
        ATTUALE=`cat /proc/acpi/battery/BAT1/state | grep remaining| cut -d\  -f8`
        PERC=`echo $(($ATTUALE*100 / $TOTALE))`
        function acpi_charge() {
                ACPI_CHARGE=`cat /proc/acpi/ac_adapter/AC/state | cut -d\  -f20`
                case $ACPI_CHARGE in
                        *on-line*) ACPI_CHARGE="+" ;;
                        *off-line*) ACPI_CHARGE="-" ;;
                esac
                echo $ACPI_CHARGE
        }
        if [ "$PERC" -lt 100 ]; then
                echo $(acpi_charge)$PERC%
        else
                echo FULL

        fi
} else
        echo --
fi
#EOF
Settiamo i permessi di esecuzione al file:
# chmod +x battery
e copiamolo in una directory con eseguibili (/bin, /usr/bin, etc..).
Ora ci serve un altro script che controlli lo stato della batteria ed eventualmente avvii lo shutdown, eccolo qui:
#Inizio file autoshutdown by Lord_Dex
#!/bin/bash
STATE=`battery`
case "$STATE" in
#Questi due (-9% e -7% sono solo di avvertimento)
        -9%)    shutdown -k now Batteria in esaurimento ;;
        -7%)    shutdown -k now Batteria in esaurimento ;;
#Questi sono reali, ce ne sono + di uno perche' dovendo affidare a crontab l'esecuzione di questo script non
#possiamo essere sicuri che quando lo script verra' avviato la batteria sara' sicuramente al -5%
        -5%)    shutdown -h 1 Batteria in esaurimento, shutdown in 60s ;;
        -4%)    shutdown -h 1 Batteria in esaurimento, shutdown in 40s ;;
        -3%)    shutdown -h 1 Batteria in esaurimento, shutdown in 30s ;;
        -2%)    shutdown -h now Batteria in esaurimento, Shutdown.. ;;
esac
#EOF
Ora dobbiamo eseguire le stesse operazioni di prima cioe' chmod e copia del file.
Ora non ci rimane che impostare il controllo a crontab, dato che lo script deve essere eseguito da root, bisogna editare obbligatoriamente /etc/crontab in questo modo:
kekko@laptop:~ $ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
*  *    * * *   root    autoshutdown &> /dev/null
#
Cioe' aggiungere l'ultima riga (* * * * * root autoshutdown) al file suddetto.
Ora il controllo avverra' ogni minuto al secondo 00 e se la percentuale di carica sara' una di quelle segnalate il pc si spegnera' dopo un determinato periodo, se si vuole fermare lo shutdown basta lanciare:
$ shutdown -c
Lo script "battery" puo' essere utilizzato in .bashrc per aggiungere al Prompt shell la percentuale di carica:
# Questo e' il mio file .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# Modified by Lord_Dex
#Qui se la variabile del terminale e' == linux (cioe' le tty) allora subito dopo il login verra' eseguito fortune
case "$TERM" in
        linux) fortune 1>&2 ;;
esac
#Lasciate invariate queste
[ -z "$PS1" ] && return
shopt -s checkwinsize
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"
if [ -z "$debian_chroot" -a -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
#Funzione che stampa lo stato della batteria, verra' utilizzata dopo
function battery_percent {
        echo `battery`
}
#Variabile contenente lo stato della batteria
BATT_STAT=$(battery_percent)
#funzione che in base allo stato di carica colora la stringa della percentuale di colori diversi
function battery_color {
        case "$(battery_percent)" in
# verde
                FULL) echo "00;32" ;;
                -9?%) echo "00;32" ;;
                -8?%) echo "00;32" ;;
#verde chiaro
		-7?%) echo "01;32" ;;
                -6?%) echo "01;32" ;;
                -5?%) echo "01;32" ;;
#giallo
		-4?%) echo "01;33" ;;
#arancione
		-3?%) echo "00;33" ;;
                -2?%) echo "00;33" ;;
#rosso chiaro
		-1?%) echo "01;31" ;;
#rosso scuro
		-?%) echo "00;31" ;;
#verde chiaro se e' in carica
		+*) echo "01;32" ;;
        esac
}
#qui viene settato il prompt
case "$TERM" in
linux)
        PS1='\[\033[00;32m\]\u\[\033[01;37m\]@\[\033[00;34m\]\h\[\033[01;37m\][\[\033[$(battery_color)m\]$(battery_percent)\[\033[01;37m\]] \[\033[01;34m\]\w\[\033[0m\] $ ' ;;
*)
        PS1='\[\033[00;37m\]\u@\h:\w $ ' ;;
esac

#if [ "$TERM" != "dumb" ]; then
#    eval "`dircolors -b`"
#    alias ls='ls --color=auto'
#fi
#Questi sono vari alias
eval `dircolors`
alias ls='ls --color=auto -F --show-control-chars'
alias grep='grep --color=auto'
alias shutdown='sudo shutdown -h now'
alias cd..='cd ..'
alias reboot='sudo shutdown -r now'
By Lord_Dex - 27/10/2006 - http://www.kapo.altervista.org - Liberamente distribuibile a patto che sia SEMPRE riportata questa nota.