Difference between revisions of "Acpid (Italiano)"

From ArchWiki
Jump to: navigation, search
m (Spegnere l'alimentazione del monitor di un laptop: corretta formattazione)
(16 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
[[Category:Power management (Italiano)]]
 
[[Category:Power management (Italiano)]]
[[Category:Daemons and system services (Italiano)]]
+
[[en:Acpid]]
{{i18n|Acpid}}
+
{{lowercase title}}
  
 
[http://acpid.sourceforge.net/ acpid] è un demone flessibile ed estensibile per la consegna degli eventi ACPI. Questi eventi sono attivati ​​da particolari azioni, quali:
 
[http://acpid.sourceforge.net/ acpid] è un demone flessibile ed estensibile per la consegna degli eventi ACPI. Questi eventi sono attivati ​​da particolari azioni, quali:
Line 10: Line 10:
 
* Collegando un adattatore di alimentazione CA ad un notebook
 
* Collegando un adattatore di alimentazione CA ad un notebook
  
acpid può essere utilizzato da solo o in combinazione con un sistema più robusto come il Pm-utils e cpufrequtils per fornire una più completa soluzione di gestione dell'alimentazione.
+
acpid può essere utilizzato da solo o in combinazione con un sistema più robusto come il [[Pm-utils (Italiano)|Pm-utils]] e [[CPU Frequency Scaling (Italiano)|CPU Frequency Scaling]] per fornire una più completa soluzione di gestione dell'alimentazione.
 +
 
 +
{{Attenzione|Si prega di notare che i [[Desktop Environment|desktop environments]] come [[GNOME]] hanno il loro modo di gestire gli eventi di acpi, in modo indipendente da acpid. Avviandoli insieme, si potrebbe incappare in comportamenti inattesi, quali sospensione e spegnimento nello stesso momento quando si preme il pulsante di accensione, oppure una sospensione multipla (due di file) dopo aver premuto una sola volta il pulsante. Dovresti essere consapevole di ciò, e disabilitare gli eventi doppi tramite il power manager del tuo DE o tramite il file di configurazione di acpid, quando sono usati insieme.}}
 +
{{Box GREEN|Nota per gli utenti di KDE SC e GNOME:|Siccome lo script fornito da acpid, '''/etc/acpi/handler.sh''', non terrà conto della configurazione del tuo ambiente desktop per la pressione del pulsante di accensione, molto probabilmente vorrai disabilitare l'immediato spegnimento del sistema alla pressione di quel tasto -che può essere molto frustrante e può causare perdita di dati, poichè potrebbe spegnere il computer senza prima chiedere di salvare il tuo lavoro,di modo che al suo posto, si aprirà il menu di spegnimento del tuo DE; per realizzare ciò, ti basta modificare lo script '''/etc/acpi/handler.sh''' e commentare la riga 15 ''poweroff'' , aggiungendoci davanti un '''#'''.}}
  
 
== Installazione ==
 
== Installazione ==
  
Il pacchetto {{Package Official|acpid}} è reperibile in [extra].
+
[[pacman (Italiano)|Installare]] il pacchetto {{Pkg|acpid}} reperibile nei [[Official Repositories (Italiano)|repository ufficiali]].
  
Modificare il file {{filename|/etc/rc.conf}} da root e aggiungere '''acpid''' alla stringa [[Rc.conf_(Italiano)#Demoni|DAEMONS ]] in modo che venga eseguito all'avvio del sistema.
+
Per averlo avviato all'accensione del sistema :
 +
* Se si sta usando [[systemd (Italiano)|systemd]], eseguire {{ic|systemctl enable acpid}} ;
 +
* Se si usa [[rc.conf (Italiano)|initscripts]], modifica {{ic|/etc/rc.conf}} da root e aggiungi {{ic|acpid}} a [[rc.conf (Italiano)#Demoni|DAEMONS array]].
  
 
== Configurazione ==
 
== Configurazione ==
acpid viene fornito con una serie di azioni predefinite per gli eventi già attivati​​, come quello che dovrebbe accadere quando si preme il pulsante di accensione sulla vostra macchina. Per impostazione predefinita, queste azioni sono definite in {{filename|/etc/acpi/handler.sh}}, e vengono eseguite dopo qualsiasi evento ACPI rilevato (come determinato da {{filename|/etc/acpi/events/anything}}).
+
{{pkg|acpid}} viene fornito con una serie di azioni predefinite per gli eventi già attivati​​, come quello che dovrebbe accadere quando si preme il pulsante di accensione sulla vostra macchina. Per impostazione predefinita, queste azioni sono definite in {{ic|/etc/acpi/handler.sh}}, e vengono eseguite dopo qualsiasi evento ACPI rilevato (come determinato da {{ic|/etc/acpi/events/anything}}).
  
Quello che segue è un breve esempio di una azione. In questo caso, quando si preme il pulsante Sleep, acpid esegue il comando {{codeline|echo -n mem >/sys/power/state}} che dovrebbe posizionare il computer allo stato ''sleep'' (sospensione):
+
Quello che segue è un breve esempio di una azione. In questo caso, quando si preme il pulsante Sleep, acpid esegue il comando {{ic|echo -n mem >/sys/power/state}} che dovrebbe posizionare il computer allo stato ''sleep'' (sospensione):
  
 
  button/sleep)
 
  button/sleep)
Line 32: Line 37:
 
Sfortunatamente non tutti i computer leggono gli eventi ACPI alla stessa maniera. Ad esempio il pulsante Sleep può essere identificato su alcune macchine come ''SLPB'' ed in altre come ''SBTN''.  
 
Sfortunatamente non tutti i computer leggono gli eventi ACPI alla stessa maniera. Ad esempio il pulsante Sleep può essere identificato su alcune macchine come ''SLPB'' ed in altre come ''SBTN''.  
  
Per determinare come i pulsanti o tasti di scelta rapida Fn vengono riconosciuti, eseguire il seguente comando da terminale come utente root:
+
Per determinare come i pulsanti o tasti di scelta rapida {{keypress|Fn}} vengono riconosciuti, eseguire il seguente comando da terminale come utente root:
 
+
 
  # tail -f /var/log/messages.log
 
  # tail -f /var/log/messages.log
  
Ora premere il pulsante di accensione e/o il pulsante Sleep (es. Fn+Esc) sulla propria macchina.  Il risultato dovrebbe essere simile a questo:
+
Ora premere il pulsante di accensione e/o il pulsante Sleep (es. {{Keypress|Fn+Esc}}) sulla propria macchina.  Il risultato dovrebbe essere simile a questo:
 
+
 
  logger: ACPI action undefined: PBTN
 
  logger: ACPI action undefined: PBTN
 
  logger: ACPI action undefined: SBTN
 
  logger: ACPI action undefined: SBTN
  
 
Se non dovesse funzionare lanciare il comando:
 
Se non dovesse funzionare lanciare il comando:
 
 
  # acpi_listen
 
  # acpi_listen
  
 
Premendo il tasto di accensione e dovreste ottenere un output simile:
 
Premendo il tasto di accensione e dovreste ottenere un output simile:
 
 
  power/button PBTN 00000000 00000b31
 
  power/button PBTN 00000000 00000b31
  
L'output di {{codeline|acpi_listen}} viene inviato allo script {{filename|handler.sh}} come parametro $1, $2 , $3 & $4 .
+
L'output di {{ic|acpi_listen}} viene inviato allo script {{ic|/etc/acpi/handler.sh}} come parametro $1, $2 , $3 & $4 .
Esempio :
+
Esempio:
 
+
 
  $1 power/button
 
  $1 power/button
 
  $2 PBTN
 
  $2 PBTN
Line 57: Line 57:
 
  $4 00000b31
 
  $4 00000b31
  
Come si può notare, il pulsante Sleep in uscita, nell'esempio, è stato riconosciuto come ''SBTN'', piuttosto che con l'etichetta ''SLPB'', come specificato nel file {{filename|/etc/acpi/handler.sh}}. Al fine di far funzionare correttamente il tasto Sleep su questa macchina, avremmo bisogno di sostituire ''SLPB)'' con ''SBTN)''.
+
Come si può notare, il pulsante Sleep in uscita, nell'esempio, è stato riconosciuto come ''SBTN'', piuttosto che con l'etichetta ''SLPB'', come specificato nel file {{ic|/etc/acpi/handler.sh}}. Al fine di far funzionare correttamente il tasto Sleep su questa macchina, avremmo bisogno di sostituire ''SLPB)'' con ''SBTN)''.
  
Utilizzando queste informazioni come base, si può facilmente personalizzare il file {{filename|handler.sh}} in modo da eseguire una varietà di comandi a seconda di quale evento viene attivato. Si veda la sezione [[#Tips & Tricks | Tips & Tricks]] per altri comandi di uso comune.
+
Utilizzando queste informazioni come base, si può facilmente personalizzare il file {{ic|/etc/acpi/handler.sh}} in modo da eseguire una varietà di comandi a seconda di quale evento viene attivato. Si veda la sezione [[#Tips & Tricks | Tips & Tricks]] per altri comandi di uso comune.
  
 
=== Configurazione alternativa ===
 
=== Configurazione alternativa ===
  
Per impostazione predefinita, tutti gli eventi ACPI sono passati allo script {{filename|/etc/acpi/handler.sh}}. Ciò è dovuto al set di regole delineate nel file {{filename|/etc/acpi/events/anything}}:
+
Per impostazione predefinita, tutti gli eventi ACPI sono passati allo script {{ic|/etc/acpi/handler.sh}}. Ciò è dovuto al set di regole delineate nel file {{ic|/etc/acpi/events/anything}}:
 
+
<pre>
+
 
  # Pass all events to our one handler script
 
  # Pass all events to our one handler script
 
  event=.*
 
  event=.*
 
  action=/etc/acpi/handler.sh %e
 
  action=/etc/acpi/handler.sh %e
</pre>
 
  
 
Anche se questo metodo funziona correttamente, alcuni utenti potrebbero preferire definire le regole per gli eventi e le azioni in un proprio script personalizzato. Di seguito un esempio di come utilizzare un singolo file per un evento ed uno script per l'azione corrispondente:
 
Anche se questo metodo funziona correttamente, alcuni utenti potrebbero preferire definire le regole per gli eventi e le azioni in un proprio script personalizzato. Di seguito un esempio di come utilizzare un singolo file per un evento ed uno script per l'azione corrispondente:
  
Come utente root, creare e modificare il file: {{filename|/etc/acpi/events/sleep-button}}. Aggiungendo quanto segue:
+
Come utente root, creare il seguente file:
  
event=button sleep.*
+
{{hc|/etc/acpi/events/sleep-button|<nowiki>
action=/etc/acpi/actions/sleep-button.sh "%e"
+
event=button sleep.*
 +
action=/etc/acpi/actions/sleep-button.sh "%e"
 +
</nowiki>}}
  
Allo stesso modo creare e modificare il file: {{filename|/etc/acpi/actions/sleep-button.sh}}.  Aggiungendo:
+
Ora creare il seguente file:
  
<pre>
+
{{hc|/etc/acpi/actions/sleep-button.sh|<nowiki>
#!/bin/sh
+
#!/bin/sh
case "$2" in
+
case "$2" in
    SLPB) echo -n mem >/sys/power/state ;;
+
    SLPB) echo -n mem >/sys/power/state ;;
    *)    logger "ACPI action undefined: $2" ;;
+
    *)    logger "ACPI action undefined: $2" ;;
esac
+
esac
</pre>
+
</nowiki>}}
  
 
Infine rendere lo script eseguibile:  
 
Infine rendere lo script eseguibile:  
 
 
  # chmod +x /etc/acpi/actions/sleep-button.sh
 
  # chmod +x /etc/acpi/actions/sleep-button.sh
  
Line 98: Line 96:
 
=== Estendere acpid tramite pm-utils ===
 
=== Estendere acpid tramite pm-utils ===
  
Anche se {{Codeline|acpid}} è in grado di fornire di base suspend2ram, si potrebbe desiderare un sistema più robusto . [[Pm-utils]] fornisce un framework molto flessibile per le operazioni suspend2ram (sospensione) e suspend2disk (ibernazione) , incluse correzioni comuni per l'hardware e i driver più problematici (ad esempio il modulo fglrx). pm-utils fornisce due script, {{Codeline|pm-suspend}} e {{Codeline|pm-hibernate}}, entrambi i quali possono essere inseriti come eventi in acpid. Per ulteriori informazioni, consultare il wiki [[Pm-utils]].
+
Anche se {{pkg|acpid}} è in grado di fornire di base suspend2ram, si potrebbe desiderare un sistema più robusto. [[pm-utils (Italiano)|pm-utils]] fornisce un framework molto flessibile per le operazioni suspend2ram (sospensione) e suspend2disk (ibernazione) , incluse correzioni comuni per l'hardware e i driver più problematici (ad esempio il modulo fglrx). pm-utils fornisce due script, {{ic|pm-suspend}} e {{ic|pm-hibernate}}, entrambi i quali possono essere inseriti come eventi in acpid. Per ulteriori informazioni, consultare il wiki [[pm-utils (Italiano)|pm-utils]].
  
 
=== Esempi di eventi ===
 
=== Esempi di eventi ===
  
Di seguito vengono mostrati degli esempi di eventi utilizzando lo script {{filename|/etc/acpi/handler.sh}} esistente. Il testo in '''grassetto''' indica le modifiche o aggiunte allo script predefinito. Come notato sopra, le etichette degli eventi possono differire in base al sistema, potrebbe essere necessario modificare in base alle vostre esigenze.
+
Di seguito vengono mostrati degli esempi di eventi utilizzando lo script {{ic|/etc/acpi/handler.sh}} esistente. Questi esempi dovrebbero essere modificati in modo da applicare le specifiche ambientali, ad esempio cambiando i nomi delle variabili evento interpretati da {{ic|acpi_listen}}.
  
Attivare Xscreensaver alla chiusura del coperchio:
+
Bloccare lo schermo con {{ic|xscreensaver}} quando viene chiuso il portatile:
  
 
  button/lid)
 
  button/lid)
     #echo "LID switched!">/dev/tty5
+
     case $3 in
         '''''IS_ACTIVE="$( pidof /usr/bin/xscreensaver )"'''''
+
         close)
 +
            # Il comando di blocco deve essere eseguito come l'utente che possiede il processo xscreensaver e non come root.
 +
            # Vedere: man xscreensaver-command. $xs avrà il valore dell'utente proprietario del processo, se esiste.
 
   
 
   
        '''''if [ -n "$IS_ACTIVE" ]'''''
+
            xs=$(ps up $(pidof xscreensaver) | awk '/xscreensaver/ {print $1}')
        '''''then'''''
+
            if test $xs; then su $xs -c "xscreensaver-command -lock"; fi
            '''''# run the lock command as the user who owns xscreensaver process,'''''
+
            ;;
            '''''# and not as root, which won't work (see: man xscreensaver-command)'''''
+
            '''''su "$( ps aux | grep xscreensaver | grep -v grep | grep $IS_ACTIVE | awk '{print $1}' )" -c "/usr/bin/xscreensaver-command -lock" &'''''
+
        '''''fi'''''
+
        ;;
+
  
Sospendere il sistema e bloccare lo schermo utilizzando slimlock quando alla chiusura del coperchio:
+
Sospendere il sistema e bloccare lo schermo utilizzando {{ic|slimlock}} quando alla chiusura del coperchio:
  
 
  button/lid)
 
  button/lid)
         #echo "LID switched!">/dev/tty5
+
    case $3 in
/usr/sbin/pm-suspend  
+
         close)
DISPLAY=:0.0 su -c - username /usr/bin/slimlock
+
            #echo "LID switched!">/dev/tty5  
        ;;
+
              /usr/sbin/pm-suspend &
 +
              DISPLAY=:0.0 su -c - username /usr/bin/slimlock
 +
              ;;
  
Eseguire {{Codeline|pm-suspend}} (tramite [[Pm-utils]]) quando viene premuto il pulsante di Sleep:
+
Eseguire {{ic|pm-suspend}} quando viene premuto il pulsante di {{keypress|Sleep}}:
  
 
  button/sleep)
 
  button/sleep)
 
     case "$2" in
 
     case "$2" in
 
         SBTN)  
 
         SBTN)  
      '''''#echo -n mem >/sys/power/state'''''
+
      #echo -n mem >/sys/power/state
             '''''/usr/sbin/pm-suspend'''''
+
             /usr/sbin/pm-suspend
 
             ;;
 
             ;;
 +
 +
Per impostare la luminosità dello schermo del portatile quando è collegato all'alimentatore o meno (potrebbe essere necessario modificare i valori, si controlli {{ic|/sys/class/backlight/acpi_video0/max_brightness}})::
 +
 +
ac_adapter)
 +
    case "$2" in
 +
        AC*|AD*)
 +
            case "$4" in
 +
                00000000)
 +
                    echo -n 50 > /sys/class/backlight/acpi_video0/brightness
 +
                    ;;
 +
                00000001)
 +
                    echo -n 100 > /sys/class/backlight/acpi_video0/brightness
 +
                    ;;
 +
            esac
 +
 +
=== Abilitare il controllo del volume ===
 +
 +
Scopri l'evento identificativo dei pulsanti del volume (vedi sopra) e sostituiscilo nei files qua sotto.  Adesso creiamo un paio di script per controllare il volume (supponendo una scheda audio [[ALSA]]):
 +
 +
{{hc|/etc/acpi/actions/volume_up.sh|<nowiki>
 +
  #!/bin/bash
 +
  /usr/bin/amixer set Master 5%+
 +
</nowiki>}}
 +
 +
{{hc|/etc/acpi/actions/volume_down.sh|<nowiki>
 +
  #!/bin/bash
 +
  /usr/bin/amixer set Master 5%-
 +
</nowiki>}}
 +
 +
e linkiamo questi ultimi ai nuovi eventi acpi:
 +
 +
{{hc|/etc/acpi/events/volume_up|<nowiki>
 +
  event=button[ /]volumeup
 +
  action=/etc/acpi/actions/volume_up.sh
 +
</nowiki>}}
 +
 +
{{hc|/etc/acpi/events/volume_down|<nowiki>
 +
  event=button[ /]volumedown
 +
  action=/etc/acpi/actions/volume_down.sh
 +
</nowiki>}}
 +
 +
e creiamo pure un altro evento per attivare/disattivare l'audio:
 +
 +
{{hc|/etc/acpi/events/volume_mute|<nowiki>
 +
  event=button[ /]volumemute
 +
  action=/usr/bin/amixer set Master toggle
 +
</nowiki>}}
  
 
=== Spegnere l'alimentazione del monitor di un laptop ===
 
=== Spegnere l'alimentazione del monitor di un laptop ===
  
Tratto dal [http://en.gentoo-wiki.com/wiki/ACPI/Configuration Wiki di Gentoo] arriva questo piccolo gioiello. Aggiungendo queste stringhe al fondo del file {{filename|/etc/acpi/actions/lm_lid.sh}} o alla sezione ''button/lid'' di {{filename|/etc/acpi/handler.sh}}, si ottiene lo spegnimento della reto-illuminazione del display LCD quando il coperchio è chiuso, e lo riaccende quando il coperchio si riapre.
+
Tratto dal [http://en.gentoo-wiki.com/wiki/ACPI/Configuration Wiki di Gentoo] arriva questo piccolo gioiello. Aggiungendo queste stringhe al fondo del file {{ic|/etc/acpi/actions/lm_lid.sh}} o alla sezione ''button/lid'' di {{ic|/etc/acpi/handler.sh}}, si ottiene lo spegnimento della reto-illuminazione del display LCD quando il coperchio è chiuso, e lo riaccende quando il coperchio si riapre.
  
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
Line 146: Line 191:
 
Se volete aumentare o diminuire la luminosità o qualcosa dipendente da X, è necessario specificare il display X così come il file ''MIT magic cookie'' (via XAUTHORITY). L'ultima parte è una credenziale di sicurezza che fornisce la lettura e scrittura al server X, il display e tutti i dispositivi di input.
 
Se volete aumentare o diminuire la luminosità o qualcosa dipendente da X, è necessario specificare il display X così come il file ''MIT magic cookie'' (via XAUTHORITY). L'ultima parte è una credenziale di sicurezza che fornisce la lettura e scrittura al server X, il display e tutti i dispositivi di input.
  
Con alcune combinazioni di Xorg e hardware problematico, ''xset dpms force off'' genera un display bianco lasciando la retroilluminazione attiva. Questo può essere risolto utilizzando vbetool dal repository 'extra'. Modificare la sezione LCD come segue:
+
Con alcune combinazioni di [[Xorg (Italiano)|Xorg]] e hardware problematico, {{ic|xset dpms force off}} genera un display bianco lasciando la retroilluminazione attiva. Questo può essere risolto utilizzando {{pkg|vbetool}} dai [[Official Repositories (Italiano)|repository ufficiali]]. Modificare la sezione LCD come segue:
  
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
Line 154: Line 199:
  
  
Se il monitor sembra solo spegnersi brevemente prima di essere ri-alimentato, molto probabilmente ciò è dovuto al fatto che la gestione dell'alimentazione fornita con xscreensaver va in conflitto con le impostazioni manuali di ''DPMS''.
+
Se il monitor sembra solo spegnersi brevemente prima di essere ri-alimentato, molto probabilmente ciò è dovuto al fatto che la gestione dell'alimentazione fornita con XScreenSaver va in conflitto con le impostazioni manuali di ''DPMS''.
  
 
=== Ottenere il nome utente del display corrente ===
 
=== Ottenere il nome utente del display corrente ===
Line 160: Line 205:
 
Ottenere il nome utente del display corrente
 
Ottenere il nome utente del display corrente
  
È possibile utilizzare la funzione {{Codeline|getuser}} per acquisire la visualizzazione dell'utente corrente:
+
È possibile utilizzare la funzione {{ic|getuser}} per acquisire la visualizzazione dell'utente corrente:
 
+
getuser ()
<pre>
+
    {
getuser ()
+
      export DISPLAY=`echo $DISPLAY | cut -c -2`
    {
+
      user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1`
    export DISPLAY=`echo $DISPLAY | cut -c -2`
+
      export XAUTHORITY=/home/$user/.Xauthority
    user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1`
+
      eval $1=$user
    export XAUTHORITY=/home/$user/.Xauthority
+
    }
    eval $1=$user
+
}
+
</pre>
+
 
   
 
   
Questa funzione può essere utilizzata, ad esempio, quando si preme il pulsante di accensione e si vuole che KDE effettui lo spegnimento correttamente:
+
Questa funzione può essere utilizzata, ad esempio, quando si preme il pulsante di accensione e si vuole che [[KDE (ITaliano)|KDE]] effettui lo spegnimento correttamente:
  
 
  button/power)
 
  button/power)
Line 185: Line 227:
 
     ;;
 
     ;;
  
== Risorse ulteriori ==
+
 
 +
Nei sistemi che utilizzano systemd, i login in x non sono più necessariamente visualizzati con {{ic|who}}, quindi la funzione {{ic|getuser}} qua sopra non funziona. Un'alternativa è usare {{ic|loginctl}} per ottenere l'informazione richiesta, ad esempio usando [https://github.com/rephorm/xuserrun xuserrun].
 +
 
 +
== Altre risorse ==
  
 
*http://acpid.sourceforge.net/ - acpid homepage
 
*http://acpid.sourceforge.net/ - acpid homepage
*http://www.capaman.8m.com/acpid.html - acpid mini-howto
+
*http://www.gentoo-wiki.info/ACPI/Configuration - Nuovo wiki di Gentoo
*http://en.gentoo-wiki.com/wiki/ACPI/Configuration - Gentoo wiki entry
+

Revision as of 02:37, 28 November 2012

acpid è un demone flessibile ed estensibile per la consegna degli eventi ACPI. Questi eventi sono attivati ​​da particolari azioni, quali:

  • Premendo il pulsante di accensione
  • Premendo il tasto Sleep/Suspend
  • Chiusura di un coperchio notebook
  • Collegando un adattatore di alimentazione CA ad un notebook

acpid può essere utilizzato da solo o in combinazione con un sistema più robusto come il Pm-utils e CPU Frequency Scaling per fornire una più completa soluzione di gestione dell'alimentazione.

Attenzione: Si prega di notare che i desktop environments come GNOME hanno il loro modo di gestire gli eventi di acpi, in modo indipendente da acpid. Avviandoli insieme, si potrebbe incappare in comportamenti inattesi, quali sospensione e spegnimento nello stesso momento quando si preme il pulsante di accensione, oppure una sospensione multipla (due di file) dopo aver premuto una sola volta il pulsante. Dovresti essere consapevole di ciò, e disabilitare gli eventi doppi tramite il power manager del tuo DE o tramite il file di configurazione di acpid, quando sono usati insieme.
Nota per gli utenti di KDE SC e GNOME: Siccome lo script fornito da acpid, /etc/acpi/handler.sh, non terrà conto della configurazione del tuo ambiente desktop per la pressione del pulsante di accensione, molto probabilmente vorrai disabilitare l'immediato spegnimento del sistema alla pressione di quel tasto -che può essere molto frustrante e può causare perdita di dati, poichè potrebbe spegnere il computer senza prima chiedere di salvare il tuo lavoro,di modo che al suo posto, si aprirà il menu di spegnimento del tuo DE; per realizzare ciò, ti basta modificare lo script /etc/acpi/handler.sh e commentare la riga 15 poweroff , aggiungendoci davanti un #.

Installazione

Installare il pacchetto acpid reperibile nei repository ufficiali.

Per averlo avviato all'accensione del sistema :

Configurazione

acpid viene fornito con una serie di azioni predefinite per gli eventi già attivati​​, come quello che dovrebbe accadere quando si preme il pulsante di accensione sulla vostra macchina. Per impostazione predefinita, queste azioni sono definite in /etc/acpi/handler.sh, e vengono eseguite dopo qualsiasi evento ACPI rilevato (come determinato da /etc/acpi/events/anything).

Quello che segue è un breve esempio di una azione. In questo caso, quando si preme il pulsante Sleep, acpid esegue il comando echo -n mem >/sys/power/state che dovrebbe posizionare il computer allo stato sleep (sospensione):

button/sleep)
    case "$2" in
        SLPB) echo -n mem >/sys/power/state ;;
	 *)    logger "ACPI action undefined: $2" ;;
    esac
    ;;

Sfortunatamente non tutti i computer leggono gli eventi ACPI alla stessa maniera. Ad esempio il pulsante Sleep può essere identificato su alcune macchine come SLPB ed in altre come SBTN.

Per determinare come i pulsanti o tasti di scelta rapida Template:Keypress vengono riconosciuti, eseguire il seguente comando da terminale come utente root:

# tail -f /var/log/messages.log

Ora premere il pulsante di accensione e/o il pulsante Sleep (es. Template:Keypress) sulla propria macchina. Il risultato dovrebbe essere simile a questo:

logger: ACPI action undefined: PBTN
logger: ACPI action undefined: SBTN

Se non dovesse funzionare lanciare il comando:

# acpi_listen

Premendo il tasto di accensione e dovreste ottenere un output simile:

power/button PBTN 00000000 00000b31

L'output di acpi_listen viene inviato allo script /etc/acpi/handler.sh come parametro $1, $2 , $3 & $4 . Esempio:

$1 power/button
$2 PBTN
$3 00000000
$4 00000b31

Come si può notare, il pulsante Sleep in uscita, nell'esempio, è stato riconosciuto come SBTN, piuttosto che con l'etichetta SLPB, come specificato nel file /etc/acpi/handler.sh. Al fine di far funzionare correttamente il tasto Sleep su questa macchina, avremmo bisogno di sostituire SLPB) con SBTN).

Utilizzando queste informazioni come base, si può facilmente personalizzare il file /etc/acpi/handler.sh in modo da eseguire una varietà di comandi a seconda di quale evento viene attivato. Si veda la sezione Tips & Tricks per altri comandi di uso comune.

Configurazione alternativa

Per impostazione predefinita, tutti gli eventi ACPI sono passati allo script /etc/acpi/handler.sh. Ciò è dovuto al set di regole delineate nel file /etc/acpi/events/anything:

# Pass all events to our one handler script
event=.*
action=/etc/acpi/handler.sh %e

Anche se questo metodo funziona correttamente, alcuni utenti potrebbero preferire definire le regole per gli eventi e le azioni in un proprio script personalizzato. Di seguito un esempio di come utilizzare un singolo file per un evento ed uno script per l'azione corrispondente:

Come utente root, creare il seguente file:

/etc/acpi/events/sleep-button
event=button sleep.*
action=/etc/acpi/actions/sleep-button.sh "%e"

Ora creare il seguente file:

/etc/acpi/actions/sleep-button.sh
 #!/bin/sh
 case "$2" in
     SLPB) echo -n mem >/sys/power/state ;;
     *)    logger "ACPI action undefined: $2" ;;
 esac

Infine rendere lo script eseguibile:

# chmod +x /etc/acpi/actions/sleep-button.sh

Utilizzando questo metodo, è facile creare un numero illimitato di singoli script di eventi/azioni.

Tips & Tricks

Estendere acpid tramite pm-utils

Anche se acpid è in grado di fornire di base suspend2ram, si potrebbe desiderare un sistema più robusto. pm-utils fornisce un framework molto flessibile per le operazioni suspend2ram (sospensione) e suspend2disk (ibernazione) , incluse correzioni comuni per l'hardware e i driver più problematici (ad esempio il modulo fglrx). pm-utils fornisce due script, pm-suspend e pm-hibernate, entrambi i quali possono essere inseriti come eventi in acpid. Per ulteriori informazioni, consultare il wiki pm-utils.

Esempi di eventi

Di seguito vengono mostrati degli esempi di eventi utilizzando lo script /etc/acpi/handler.sh esistente. Questi esempi dovrebbero essere modificati in modo da applicare le specifiche ambientali, ad esempio cambiando i nomi delle variabili evento interpretati da acpi_listen.

Bloccare lo schermo con xscreensaver quando viene chiuso il portatile:

button/lid)
    case $3 in
        close)
            # Il comando di blocco deve essere eseguito come l'utente che possiede il processo xscreensaver e non come root.
            # Vedere: man xscreensaver-command. $xs avrà il valore dell'utente proprietario del processo, se esiste.

            xs=$(ps up $(pidof xscreensaver) | awk '/xscreensaver/ {print $1}')
            if test $xs; then su $xs -c "xscreensaver-command -lock"; fi
            ;;

Sospendere il sistema e bloccare lo schermo utilizzando slimlock quando alla chiusura del coperchio:

button/lid)
    case $3 in
        close)
            #echo "LID switched!">/dev/tty5 
             /usr/sbin/pm-suspend &
             DISPLAY=:0.0 su -c - username /usr/bin/slimlock
             ;;

Eseguire pm-suspend quando viene premuto il pulsante di Template:Keypress:

button/sleep)
    case "$2" in
        SBTN) 
	     #echo -n mem >/sys/power/state
            /usr/sbin/pm-suspend
            ;;

Per impostare la luminosità dello schermo del portatile quando è collegato all'alimentatore o meno (potrebbe essere necessario modificare i valori, si controlli /sys/class/backlight/acpi_video0/max_brightness)::

ac_adapter)
    case "$2" in
        AC*|AD*)
            case "$4" in
                00000000)
                    echo -n 50 > /sys/class/backlight/acpi_video0/brightness
                    ;;
                00000001)
                    echo -n 100 > /sys/class/backlight/acpi_video0/brightness
                    ;;
            esac

Abilitare il controllo del volume

Scopri l'evento identificativo dei pulsanti del volume (vedi sopra) e sostituiscilo nei files qua sotto. Adesso creiamo un paio di script per controllare il volume (supponendo una scheda audio ALSA):

/etc/acpi/actions/volume_up.sh
  #!/bin/bash
  /usr/bin/amixer set Master 5%+
/etc/acpi/actions/volume_down.sh
  #!/bin/bash
  /usr/bin/amixer set Master 5%-

e linkiamo questi ultimi ai nuovi eventi acpi:

/etc/acpi/events/volume_up
  event=button[ /]volumeup
  action=/etc/acpi/actions/volume_up.sh
/etc/acpi/events/volume_down
  event=button[ /]volumedown
  action=/etc/acpi/actions/volume_down.sh

e creiamo pure un altro evento per attivare/disattivare l'audio:

/etc/acpi/events/volume_mute
  event=button[ /]volumemute
  action=/usr/bin/amixer set Master toggle

Spegnere l'alimentazione del monitor di un laptop

Tratto dal Wiki di Gentoo arriva questo piccolo gioiello. Aggiungendo queste stringhe al fondo del file /etc/acpi/actions/lm_lid.sh o alla sezione button/lid di /etc/acpi/handler.sh, si ottiene lo spegnimento della reto-illuminazione del display LCD quando il coperchio è chiuso, e lo riaccende quando il coperchio si riapre.

case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
    closed) XAUTHORITY=$(ps -C xinit -f --no-header | sed -n 's/.*-auth //; s/ -[^ ].*//; p') xset -display :0 dpms force off ;;
    open)   XAUTHORITY=$(ps -C xinit -f --no-header | sed -n 's/.*-auth //; s/ -[^ ].*//; p') xset -display :0 dpms force on  ;;
esac

Se volete aumentare o diminuire la luminosità o qualcosa dipendente da X, è necessario specificare il display X così come il file MIT magic cookie (via XAUTHORITY). L'ultima parte è una credenziale di sicurezza che fornisce la lettura e scrittura al server X, il display e tutti i dispositivi di input.

Con alcune combinazioni di Xorg e hardware problematico, xset dpms force off genera un display bianco lasciando la retroilluminazione attiva. Questo può essere risolto utilizzando vbetool dai repository ufficiali. Modificare la sezione LCD come segue:

case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
    closed) vbetool dpms off ;;
    open)   vbetool dpms on  ;;
esac


Se il monitor sembra solo spegnersi brevemente prima di essere ri-alimentato, molto probabilmente ciò è dovuto al fatto che la gestione dell'alimentazione fornita con XScreenSaver va in conflitto con le impostazioni manuali di DPMS.

Ottenere il nome utente del display corrente

Ottenere il nome utente del display corrente

È possibile utilizzare la funzione getuser per acquisire la visualizzazione dell'utente corrente:

getuser ()
    {
     export DISPLAY=`echo $DISPLAY | cut -c -2`
     user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1`
     export XAUTHORITY=/home/$user/.Xauthority
     eval $1=$user
    }

Questa funzione può essere utilizzata, ad esempio, quando si preme il pulsante di accensione e si vuole che KDE effettui lo spegnimento correttamente:

button/power)
    case "$2" in
        PBTN)
            getuser "$user"
            echo $user > /dev/tty5
            su $user -c "dcop ksmserver ksmserver logout 0 2 0"
            ;;
          *) logger "ACPI action undefined $2" ;;
    esac
    ;;


Nei sistemi che utilizzano systemd, i login in x non sono più necessariamente visualizzati con who, quindi la funzione getuser qua sopra non funziona. Un'alternativa è usare loginctl per ottenere l'informazione richiesta, ad esempio usando xuserrun.

Altre risorse