eventi acpi alla pressione di un tasto

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

eventi acpi alla pressione di un tasto

Messaggio 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

Avatar utente
gigiobagiano
Linux 3.x
Linux 3.x
Messaggi: 530
Iscritto il: dom 11 mar 2007, 12:58
Nome Cognome: Filippo
Slackware: 14.2
Kernel: vanilla-4.4.38
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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...

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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 :-(

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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

Avatar utente
gigiobagiano
Linux 3.x
Linux 3.x
Messaggi: 530
Iscritto il: dom 11 mar 2007, 12:58
Nome Cognome: Filippo
Slackware: 14.2
Kernel: vanilla-4.4.38
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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...

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Messaggio 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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: eventi acpi alla pressione di un tasto

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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 :-)

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: eventi acpi alla pressione di un tasto

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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 :?

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: eventi acpi alla pressione di un tasto

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: eventi acpi alla pressione di un tasto

Messaggio da targzeta »

allora prova a mettere l'& dopo l'invocazione degli script nel file dell'acpid (acpi_handler.sh?).

Spina

P.S. riavvia acpid.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: eventi acpi alla pressione di un tasto

Messaggio 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

Rispondi