Pagina 1 di 4
eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 15:39
da conraid
Non so se è la sezione giusta, ma provo a scrivere qui. Se qualche moderatore vuole cambiare no problem
Ho un notebook che non ha una gestione ACPI ottimale, è un HP 6710s, e quindi ho configurato i vari eventi acpi per svolgere determinate azioni. Ci sono però alcuni problemi, non so se derivati da una mia cattiva conoscenza della programmazione BASH o dal sistema.
Se io abbino un evento alla diminuzione di luminosità per esempio è tutto ok. Clicco il tasto e mi diminuisce la luminosità. Ma questo vale solo per la prima volta. Se io voglio diminuirlo ancora non va.
Se invece dopo aumento tutto ok.
In pratica mi prende l'evento una sola volta.
Il mio dubbio è questo: è un problema di sistema che non prende in considerazione due eventi uguali uno dopo l'altro (e se sì come posso rimediare?) oppure deriva dal fatto che all'inizio leggo il valore della luminosità e quindi lui valuta sempre quello?
Ho provato a mettere tutto in acpi_handler.sh, a fare vari events separati, a richiamare file esterni, a fare una diminuizione "matematica" del valore ed a mettere valori fissi. Ma il comportamento non cambia. Per questo pensato ad un problema di "doppioni"
Attualmente ho questo in acpi_handler.sh
Codice: Seleziona tutto
...
case "$3" in
00000087)
/etc/acpi/actions/brightness.sh dim
;;
00000086)
/etc/acpi/actions/brightness.sh add
;;
esac
...
dove brightness.sh è così:
Codice: Seleziona tutto
#!/bin/sh
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/brightness"
dim_lum() {
BRIGHTNESS=$(cat $FILE_BRIGHTNESS)
case $BRIGHTNESS in
100)
echo 82 > $FILE_BRIGHTNESS
;;
82)
echo 71 > $FILE_BRIGHTNESS
;;
27)
logger "ACPI Brightness: Raggiunto livello minimo"
;;
*)
logger "Nessun valore trovato"
;;
esac
}
add_lum() {
BRIGHTNESS=$(cat $FILE_BRIGHTNESS)
case $BRIGHTNESS in
100)
logger "ACPI Brightness: Raggiunto livello massimo"
;;
82)
echo 100 > $FILE_BRIGHTNESS
;;
71)
echo 82 > $FILE_BRIGHTNESS
;;
*)
logger "Nessun valore trovato"
;;
esac
}
case "$1" in
dim)
dim_lum
;;
add)
add_lum
;;
*)
logger "Errore Brightness"
;;
esac
Tra 82 e 71 si cono gli altri livelli disponibili
Spero di essermi spiegato
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 17:22
da gigiobagiano
al di là che ho acpi ancora sotto proc e ho un thinkpad però:
Codice: Seleziona tutto
cat /proc/acpi/ibm/brightness
level: 7
commands: up, down
commands: level <level> (<level> is 0-7)
quindi nel file metto echo up/down e via...non hai qualcosa del genere?
Probabilmente hai già dato un'occhiata a
questo e al relativo
talk ma magari ti può essere utile anche perchè in genere tendono a tenere in continuo aggiornamento queste schede...
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 17:49
da conraid
gigiobagiano ha scritto:al di là che ho acpi ancora sotto proc e ho un thinkpad però:
Codice: Seleziona tutto
cat /proc/acpi/ibm/brightness
level: 7
commands: up, down
commands: level <level> (<level> is 0-7)
quindi nel file metto echo up/down e via...non hai qualcosa del genere?
No, quei file che ci sono anche in sony_acpi, ma per gli HP non c'è niente
Io ho questi
Codice: Seleziona tutto
ls /proc/acpi/video/C098/C1AA
EDID brightness info state
Codice: Seleziona tutto
cat brightness
levels: 100 43 27 30 37 43 48 51 52 62 71 82 100
current: 100
Ma per agire devo andare in /sys/devices/virtual/backlight/acpi_video0 dove ho questi file
Codice: Seleziona tutto
actual_brightness bl_power brightness max_brightness uevent
E se modifico il valore di brightness funziona
uevent è vuoto, ho come l'impressione che dovrei agire proprio tramite uevent ma non so come
UPDATE:
il problema sembra proprio nella lettura del valore, che prende sempre come 100
infatti anche cambiandolo a mano la pressione del tasto per diminuire lo porta ad 82 anche se prima era minore, quella del tasto per aumentarlo sempre a 100

Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 18:54
da absinthe
prova a sostituire
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/brightness"
con
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/actual_brightness"
oppure
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/brightness"
BRIGHTNESS=$(grep "current:" $FILE_BRIGHTNESS | cut -f2 -d ) #<-c'è lo spazio dopo -d
M
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 18:55
da gigiobagiano
Ma actual_brightness cos'è? Scusami sto sparando un po' nel mucchio perchè l'ultimo hp che ho avuto non aveva alcun tasto acpi o quasi...
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 19:00
da conraid
absinthe ha scritto:prova a sostituire
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/brightness"
con
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/actual_brightness"
oppure
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/brightness"
BRIGHTNESS=$(grep "current:" $FILE_BRIGHTNESS | cut -f2 -d ) #<-c'è lo spazio dopo -d
M
Fatto, ma niente. Per lui il valore iniziare è sempre 100 anche se riavvio l'ACPI quando il valore è minore
Questo per leggere, perché per settare non posso usare actual_brightness, mi dice permesso negato
Ora provo il secondo caso
Nel sito HP lo dichiarano compatibile con Suse, ho provato una live ma i soliti file dentro ACPI e non funzionano i tasti. Chissà installandola...
@gigiobagiano
acual_brightness è il valore corrente della lumisotià, ed è sempre uguale a brightness
UPDATE
come non detto, quel brightness che vedete sopra è quello in proc, non quello in sys, ho provato a leggere anche quello con una riga diversa ma niente
Quello in sys contiene solamente un valore
Inviato: ven 14 mar 2008, 19:12
da conraid
absinthe ha scritto:
BRIGHTNESS=$(grep "current:" $FILE_BRIGHTNESS | cut -f2 -d ) #<-c'è lo spazio dopo -d
Questo mi da errore.
Se provo a fare
BRIGHTNESS=$(grep "current:" $FILE_BRIGHTNESS | cut -f2 --delimiter= )
mi da tutta la riga
current: 100
Io avevo fatto
BRIGTNESS=`grep current /proc/acpi/video/C098/C1AA/brightness | awk '{ print $2 }'`
e mi ritorna il valore corretto da linea di comando, dal programma invocato da acpi sempre 100
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 19:17
da targzeta
perchè non metti un 'echo BRIGHTNESS > /tmp/mio_file'? Così sai cosa effettivamente stai valutando nel case.
Puoi postare l'output del cat? così vediamo di capire.
Spina
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 19:50
da conraid
spina ha scritto:perchè non metti un 'echo BRIGHTNESS > /tmp/mio_file'? Così sai cosa effettivamente stai valutando nel case.
Puoi postare l'output del cat? così vediamo di capire.
Qualsiasi cat mi da 100 prima dell'echo valore al file e valore subito dopo
Per esempio 100 prima di
echo 82 > $FILE_BRIGHTNESS
ed 82 dopo
ma alla seconda digitazione del tasto è idem.
Come se lui leggesse sempre 100, però questa storia del file temporaneo mi ha fatto venire una idea, scrivo il valore in un file temporaneo e dopo leggo quello. Tanto ormai ne ho fatte decine di prove
UPDATE
Risolto, nel senso che con l'aiuto di un file temporaneo riesco nell'intento. Ho visto però che non prende tutti i valori. Appena trovo i valori posto una soluzione per chi si trova nello stesso caso
grazie a tutti, soprattutto a Spina

Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 20:22
da targzeta
Secondo me non hai bisogno di un file temporaneo. Da quello che ho capito hai provato a mettere due cat, uno prima del comando e l'altro dopo giusto? E tutto è corretto. Hai provato a fare tu un cat a mano prima di ripremere di nuovo il tasto? così sai se è lo script che legge male (e mi sembra strano) oppure se non sia effettivamente il driver che risetta a 100 il valore.
spina
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 20:46
da conraid
spina ha scritto:Secondo me non hai bisogno di un file temporaneo. Da quello che ho capito hai provato a mettere due cat, uno prima del comando e l'altro dopo giusto? E tutto è corretto. Hai provato a fare tu un cat a mano prima di ripremere di nuovo il tasto? così sai se è lo script che legge male (e mi sembra strano) oppure se non sia effettivamente il driver che risetta a 100 il valore.
spina
Allora. Faccio un esempio. Ho 100 e premendo il tasto per abbassare la luminosità voglio metterlo ad 82.
Se faccio un cat prima ed uno dopo ho i valori corretti. Per esempio prima 100 e dopo 82.
Ed un cat manuale mi da 82.
Quindi il valore cambia veramente.
Ma se premo nuovamente il tasto ho sempre 100 ed 82 dai cat nello script e non cambia il valore del file.
Il cat manuale è sempre 82.
La cosa "stronza" è che ho fatto in modo che quando tolgo l'AC ADAPTER la luminosità mi va a 50. E funziona tutto ok.
Ma se premo il tasto per diminuire la luminosità ho sempre 100 ed 82, e lo setta ad 82.
Spero di essermi spiegato

Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 21:25
da targzeta
Fai una cosa, prova ad eseguire tu lo script, senza l'uso dell'acpid. Invocalo due volte e poi dimmi se funziona (così possiamo dare per certo la colpa ad acpid), io intanto torno a casa e guardo il mio file per acpid, che se non sbaglio c'erano delle accortezze da fare, le lessi da qualche parte, tipo un & dopo l'invocazione.
spina
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 21:31
da conraid
spina ha scritto:Fai una cosa, prova ad eseguire tu lo script, senza l'uso dell'acpid. Invocalo due volte e poi dimmi se funziona (così possiamo dare per certo la colpa ad acpid), io intanto torno a casa e guardo il mio file per acpid, che se non sbaglio c'erano delle accortezze da fare, le lessi da qualche parte, tipo un & dopo l'invocazione.
spina
Se lo eseguo io funziona anche senza file temporaneo
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 21:40
da targzeta
allora prova a mettere l'& dopo l'invocazione degli script nel file dell'acpid (acpi_handler.sh?).
Spina
P.S. riavvia acpid.
Re: eventi acpi alla pressione di un tasto
Inviato: ven 14 mar 2008, 21:57
da conraid
spina ha scritto:allora prova a mettere l'& dopo l'invocazione degli script nel file dell'acpid (acpi_handler.sh?).
Spina
P.S. riavvia acpid.
Niente
Codice: Seleziona tutto
case "$3" in
00000087)
/etc/acpi/actions/brightness.sh dim &
;;
00000086)
/etc/acpi/actions/brightness.sh add &
;;
esac
Codice: Seleziona tutto
#!/bin/sh
# Configurazione per i tasti di regolazione della luminosità
FILE_BRIGHTNESS="/sys/devices/virtual/backlight/acpi_video0/brightness"
TMP_BRIGHTNESS="/tmp/brightness"
if [ ! -e $TMP_BRIGHTNESS ]; then
echo 100 > $TMP_BRIGHTNESS
fi
dim_lum() {
case $(cat $FILE_BRIGHTNESS) in
100)
echo 82 > $FILE_BRIGHTNESS
echo 82 > $TMP_BRIGHTNESS
;;
82)
echo 71 > $FILE_BRIGHTNESS
echo 71 > $TMP_BRIGHTNESS
;;
71)
echo 62 > $FILE_BRIGHTNESS
echo 62 > $TMP_BRIGHTNESS
;;
62)
echo 51 > $FILE_BRIGHTNESS
echo 51 > $TMP_BRIGHTNESS
;;
51)
echo 43 > $FILE_BRIGHTNESS
echo 43 > $TMP_BRIGHTNESS
;;
43)
echo 43 > $FILE_BRIGHTNESS
echo 43 > $TMP_BRIGHTNESS
;;
*)
logger "Nessun valore trovato"
;;
esac
}
add_lum() {
case $(cat $FILE_BRIGHTNESS) in
100)
echo 100 > $FILE_BRIGHTNESS
echo 100 > $TMP_BRIGHTNESS
;;
82)
echo 100 > $FILE_BRIGHTNESS
echo 100 > $TMP_BRIGHTNESS
;;
71)
echo 82 > $FILE_BRIGHTNESS
echo 82 > $TMP_BRIGHTNESS
;;
62)
echo 71 > $FILE_BRIGHTNESS
echo 71 > $TMP_BRIGHTNESS
;;
51)
echo 62 > $FILE_BRIGHTNESS
echo 62 > $TMP_BRIGHTNESS
;;
43)
echo 51 > $FILE_BRIGHTNESS
echo 51 > $TMP_BRIGHTNESS
;;
*)
logger "Nessun valore trovato"
;;
esac
}
case "$1" in
dim)
dim_lum
;;
add)
add_lum
;;
*)
logger "Errore Brightness"
;;
esac
Se invece di
case $(cat $FILE_BRIGHTNESS) in
metto
case $(cat $TMP_BRIGHTNESS) in
funziona tutto anche in ACPI, altrimenti solo invocandolo a mano