View previous topic :: View next topic |
Author |
Message |
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Sun Apr 22, 2007 8:50 pm Post subject: |
|
|
Ne ho fatto uno anche io utilizzando le info acpi.
Quando la batteria arriva al 3%, incomincia un fastidioso /root/sound/beep.wav e dopo circa 1 minuto spegne il notebook.
L'ho salvato in /root/script/battery:
Code: | #!/bin/bash
WARNING=3
TMP=60
FULL=`cat /proc/acpi/battery/BAT0/info |awk '/full\ capacity:/ { print $4 }'`
while true ; do
PRESENT=`cat /proc/acpi/battery/BAT0/state |awk '/present:/ { print $2}'`
STATE=`cat /proc/acpi/battery/BAT0/state |awk '/charging\ state:/ { print $3 }'`
REMAINING=`cat /proc/acpi/battery/BAT0/state |awk '/remaining\ capacity:/ { print $3 }'`
sleep 5
if [ "$PRESENT" = "yes" ] ; then
case $STATE in
charged)
TMP=60 ;;
charging)
TMP=60 ;;
discharging)
CHARGE=$((${REMAINING}*100/${FULL}))
if [ "$CHARGE" -le "$WARNING" ] ; then
let "TMP -=5"
aplay /root/sound/beep.wav &>/dev/null
if [ "$TMP" -le 1 ] ; then
/sbin/shutdown -h now
fi
else
TMP=60
fi
;;
esac
fi
done |
La cosa carina è che anche dopo il beep, se si attacca l'alimentazione ac entro un minuto si salva la sessione.
Questo sopra può andare bene per tutti, ma ne ho fatta una versione, leggermente più complessa per integrarlo con dwm, se vi interessa lo potete trovare in questo post 4021898
EDIT: dimenticavo, nello script originale in perl, l'ultimo elseif è un elsif! _________________ LP |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Tue Apr 24, 2007 8:31 am Post subject: |
|
|
quindi questo script parte dal presupposto che il pc ci metta almeno 60 secondi a passare da batteria=3 a batteria=1 ... _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Tue Apr 24, 2007 9:59 am Post subject: |
|
|
non ho capito bene....
Comunque, lo script suppone che la batteria per passare dal 3% al 1% ci metta più di 1minuto naturalmente.
Secondo me è una buona stima, infatti facendo due conti, supponendo che la batteria si scarichi linearmente ad abbia un'autonomia di almeno 2 ore, il 2% percento di 2 ore è più di 2 minuti, quindi il mio minuto è più che "abbondante"...
Casomai si può sempre aumentare la percentuale di WARNING.
Mandi. _________________ LP |
|
Back to top |
|
|
table Apprentice
Joined: 17 Feb 2007 Posts: 279 Location: Gazzaniga (BG) Italy
|
Posted: Fri Mar 06, 2009 9:48 am Post subject: |
|
|
Ciao,
mi riallaccio a questo argomento.
Ho notato che il mio laptop si spegne bruscamente senza fare nulla quando la batteria va a 0. Quindi stavo pensando si usare questo script.
Il problema però è che il percorso della batteria sotto proc non esiste:
Code: | stealth / # ls -l /proc/acpi/
total 0
dr-xr-xr-x 4 root root 0 Mar 6 10:42 button
dr-xr-xr-x 3 root root 0 Mar 6 10:42 embedded_controller
dr-xr-xr-x 2 root root 0 Mar 6 10:42 power_resource
dr-xr-xr-x 4 root root 0 Mar 6 10:42 processor
dr-xr-xr-x 2 root root 0 Mar 6 10:42 thermal_zone
-rw-r--r-- 1 root root 0 Mar 6 10:42 wakeup
|
nel kernel ho abilitato in built.in tutti i moduli per i quali ho bisogno di gestire l'ACPI:
Code: |
--- ACPI (Advanced Configuration and Power Interface) Support
[ ] Deprecated /proc/acpi files
[ ] Deprecated power /proc/acpi directories
[*] Future power /sys interface
[ ] Deprecated /proc/acpi/event support
<*> AC Adapter
<*> Battery
<*> Button
<*> Fan
-*- Dock
< > Removable Drive Bay (EXPERIMENTAL)
<*> Processor
<*> Thermal Zone
-*- ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)
<*> Smart Battery System
|
l'output di dmesg invece non mostra problemi di riconoscimento della batteria:
Code: | stealth linux # dmesg | grep -e "BAT"
[ 0.346953] ACPI: Battery Slot [BAT1] (battery present)
|
_________________ Pulisci l'html con:
Code: | sed 's/<[Bb][Rr][ \t]*\/*>/\n/g;s/<\/*[^>]\+\/*>//g' |
skype: matteopinguino |
|
Back to top |
|
|
Scen Retired Dev
Joined: 29 Jul 2003 Posts: 2470 Location: Padova, Italy
|
Posted: Fri Mar 06, 2009 10:34 am Post subject: |
|
|
table wrote: | Il problema però è che il percorso della batteria sotto proc non esiste:
Code: | stealth / # ls -l /proc/acpi/
total 0
dr-xr-xr-x 4 root root 0 Mar 6 10:42 button
dr-xr-xr-x 3 root root 0 Mar 6 10:42 embedded_controller
dr-xr-xr-x 2 root root 0 Mar 6 10:42 power_resource
dr-xr-xr-x 4 root root 0 Mar 6 10:42 processor
dr-xr-xr-x 2 root root 0 Mar 6 10:42 thermal_zone
-rw-r--r-- 1 root root 0 Mar 6 10:42 wakeup
|
|
Devi abilitare anche le voci "Deprecated /proc/acpi ecc. ecc.", per cui:
Code: |
--- ACPI (Advanced Configuration and Power Interface) Support
[*] Deprecated /proc/acpi files
[*] Deprecated power /proc/acpi directories
[*] Future power /sys interface
[*] Deprecated /proc/acpi/event support
<*> AC Adapter
<*> Battery
<*> Button
<*> Fan
-*- Dock
< > Removable Drive Bay (EXPERIMENTAL)
<*> Processor
<*> Thermal Zone
-*- ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)
<*> Smart Battery System
|
_________________ I was born in a deep forest/I wish I could live here all my life/I am made from stones and roots/My home, these woods and roads
All my life I loved this sound/Of the woods all around/Eagles flies where the winds blows free
Journey is my destiny |
|
Back to top |
|
|
table Apprentice
Joined: 17 Feb 2007 Posts: 279 Location: Gazzaniga (BG) Italy
|
Posted: Fri Mar 06, 2009 11:48 am Post subject: |
|
|
Scen wrote: |
Devi abilitare anche le voci "Deprecated /proc/acpi ecc. ecc.", per cui:
|
hai ragione, grazie _________________ Pulisci l'html con:
Code: | sed 's/<[Bb][Rr][ \t]*\/*>/\n/g;s/<\/*[^>]\+\/*>//g' |
skype: matteopinguino
Last edited by table on Fri Mar 06, 2009 12:29 pm; edited 1 time in total |
|
Back to top |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Fri Mar 06, 2009 12:28 pm Post subject: |
|
|
se ti riferisci al mio script, nei mesi ho raggiunto anche queste modifiche:
Code: | FULL=`cat /sys/class/power_supply/BAT0/charge_full'
PRESENT=`cat /sys/class/power_supply/BAT0/present`
CHARGE=`cat /sys/class/power_supply/BAT0/charge_now`
STATUS=`cat /sys/class/power_supply/BAT0/status` |
e senza moduli deprecati.
/EDIT:
da qualche mese gestisco lo spegnimento del laptop a batteria scarica direttamente tramite l'acpi:
Code: | #> cat /etc/acpi/events/hotkey
event=.*
action=/etc/acpi/hotkey.sh %e |
Code: |
#> grep -vE '(^[[:space:]]*($|(#|!|;|//)))' /etc/acpi/hotkey.sh
ac_offline () {
CHARGE=`cat /sys/class/power_supply/BAT0/charge_now`
FULL=`cat /sys/class/power_supply/BAT0/charge_full`
AC=`cat /sys/class/power_supply/AC0/online`
PERC=5
TIME=55
if test "$AC" != "1" && test "$((${CHARGE}*100/${FULL}))" -le "$PERC";then
sleep $TIME
if test "$AC" != "1";then
/sbin/halt
fi
fi
}
[ "$1:$2" = hotkey:ATKD ] && case "$3" in
00000057) ac_offline ;;
esac |
funge solamente quando serve! _________________ LP |
|
Back to top |
|
|
|