Difference between revisions of "Acpid (Italiano)"

From ArchWiki
Jump to: navigation, search
(creata pagina italiana)
 
m (ALLINEATO col wiki inglese)
(21 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 +
{{lowercase title}}
 
[[Category:Power management (Italiano)]]
 
[[Category:Power management (Italiano)]]
[[Category:Daemons and system services (Italiano)]]
+
[[en:Acpid]]
{{i18n|Acpid}}
+
[[zh-CN:Acpid]]
{{translateme}}
+
  
[http://acpid.sourceforge.net/ acpid] is a flexible and extensible daemon for delivering ACPI events. These events are triggered by certain actions, such as:
+
[http://acpid.sourceforge.net/ acpid] è un demone flessibile ed estensibile per la consegna degli eventi ACPI. Questi eventi sono attivati ​​da particolari azioni, quali:
* Pressing the Power button
+
* Pressing the Sleep/Suspend button
+
* Closing a notebook lid
+
* (Un)Plugging an AC power adapter from a notebook
+
acpid can be used by itself, or combined with a more robust system such as [[Pm-utils]] and [[Cpufrequtils]] to provide a more complete power management solution.
+
  
== Installation ==
+
* Premendo il pulsante di accensione
 +
* Premendo il tasto Sleep/Suspend
 +
* Chiusura di un coperchio notebook
 +
* Collegando un adattatore di alimentazione CA ad un notebook
  
The {{Package Official|acpid}} package is available in [extra].
+
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.
  
Edit {{filename|/etc/rc.conf}} as root and add '''acpid''' to the [[rc.conf#Daemons|DAEMONS array]] to have it start on boot.
+
{{Note|
 +
* [[Desktop Environment (Italiano)|ambienti desktop]], come [[GNOME]], [[Systemd#ACPI power management|systemd]] login manager e alcuni demoni di[[Extra Keyboard Keys|gestione dei tasti extra]] potrebbero implementare degli schemi per la gestione degli eventi propri, in maniera indipendente da acpid. Eseguendo più di un sistema alla volta, potrebbe provocare comportamenti inaspettati, come una sospensione doppia, due volte in fila dopo una pressione del pulsante per la sospensione. Si dovrebbe essere consapevoli di ciò, e abilitare solamente i gestori desiderati.
 +
* Siccome di default lo script installato da acpid, '''/etc/acpi/handler.sh''', sovrascriverà la funzionalità alla pressione del pulsante di accensione del tuo ambiente desktop, probabilmente vorrai cambiare la routine di acpid, per evitare di spegnere il sistema alla pressione inavvertita del pulsante di accensione.(leggi le istruzioni sotto).}}
  
== Configuration ==
+
== Installazione ==
  
acpid comes with a number of predefined actions for triggered events, such as what should happen when you press the Power button on your machine. By default, these actions are defined in {{filename|/etc/acpi/handler.sh}}, which is executed after any ACPI events are detected (as determined by {{filename|/etc/acpi/events/anything}}).
+
[[pacman (Italiano)|Installare]] il pacchetto {{Pkg|acpid}} reperibile nei [[Official Repositories (Italiano)|repository ufficiali]].
  
The following is a brief example of one such action. In this case, when the Sleep Button is pressed, acpid runs the command {{codeline|echo -n mem >/sys/power/state}} which ''should'' place the computer into a sleep (suspend) state:
+
Per averlo avviato all'accensione del sistema, usando [[systemd]] :
 +
  # systemctl enable acpid
 +
 
 +
== Configurazione ==
 +
{{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 {{ic|echo -n mem >/sys/power/state}} che dovrebbe posizionare il computer allo stato ''sleep'' (sospensione):
  
 
  button/sleep)
 
  button/sleep)
Line 30: Line 36:
 
     ;;
 
     ;;
  
Unfortunately, not every computer labels ACPI events in the same way. For example, the Sleep button may be identified on one machine as ''SLPB'' and on another as ''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''.  
 
+
To determine how your buttons or Fn shortcuts are recognized, run the following command from a terminal as 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
  
Now press the Power button and/or Sleep button (e.g. Fn+Esc) on your machineThe result should look something this:
+
Ora premere il pulsante di accensione e/o il pulsante Sleep (es. {{Keypress|Fn+Esc}}) sulla propria macchinaIl 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
  
If that doesn't work,run:
+
Se non dovesse funzionare lanciare il comando:
 
  # acpi_listen
 
  # acpi_listen
  
Then press the power button and you'll see something like this:
+
Premendo il tasto di accensione e dovreste ottenere un output simile:
 
  power/button PBTN 00000000 00000b31
 
  power/button PBTN 00000000 00000b31
  
The output of acpi_listen is sent to handler.sh as $1, $2 , $3 & $4 parameters.
+
L'output di {{ic|acpi_listen}} viene inviato allo script {{ic|/etc/acpi/handler.sh}} come parametro $1, $2 , $3 & $4 .
example :
+
Esempio:
 
  $1 power/button
 
  $1 power/button
 
  $2 PBTN
 
  $2 PBTN
Line 54: Line 58:
 
  $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 {{ic|/etc/acpi/handler.sh}}. Al fine di far funzionare correttamente il tasto Sleep su questa macchina, avremmo bisogno di sostituire ''SLPB)'' con ''SBTN)''.
  
As you might have noticed, the Sleep button in the sample output is actually recognized as ''SBTN'', rather than the ''SLPB'' label specified in the default {{filename|/etc/acpi/handler.sh}}. In order for Sleep function to work properly on this machine, we would need to replace ''SLPB)'' with ''SBTN)''.
+
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.
  
Using this information as a base, you can easily customize the {{filename|handler.sh}} file to execute a variety of commands depending on which event is triggered.  See the [[Acpid#Tips & Tricks | Tips & Tricks]] section below for other commonly used commands.
+
=== Configurazione alternativa ===
  
=== Alternative configuration ===
+
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}}:
 
+
By default, all ACPI events are passed through the {{filename|/etc/acpi/handler.sh}} script. This is due to the ruleset outlined in {{filename|/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>
 
While this works just fine as it is, some users may prefer to define event rules and actions in their own self-contained scripts. The following is an example of how to use an individual event file and corresponding action script:
 
  
As root, create and edit the file: {{filename|/etc/acpi/events/sleep-button}}. Add the following:
+
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:
  
event=button sleep.*
+
Come utente root, creare il seguente file:
action=/etc/acpi/actions/sleep-button.sh "%e"
+
  
Now create and edit the file: {{filename|/etc/acpi/actions/sleep-button.sh}}.  Add:
+
{{hc|/etc/acpi/events/sleep-button|<nowiki>
<pre>
+
event=button sleep.*
#!/bin/sh
+
action=/etc/acpi/actions/sleep-button.sh "%e"
case "$2" in
+
</nowiki>}}
    SLPB) echo -n mem >/sys/power/state ;;
+
 
    *)    logger "ACPI action undefined: $2" ;;
+
Ora creare il seguente file:
esac
+
 
</pre>
+
{{hc|/etc/acpi/actions/sleep-button.sh|<nowiki>
Finally, make the script executable:
+
#!/bin/sh
 +
case "$2" in
 +
    SLPB) echo -n mem >/sys/power/state ;;
 +
    *)    logger "ACPI action undefined: $2" ;;
 +
esac
 +
</nowiki>}}
  
 +
Infine rendere lo script eseguibile:
 
  # chmod +x /etc/acpi/actions/sleep-button.sh
 
  # chmod +x /etc/acpi/actions/sleep-button.sh
  
Using this method, it is easy to create any number of individual event/action scripts.
+
Utilizzando questo metodo, è facile creare un numero illimitato di singoli script di eventi/azioni.
  
 
== Tips & Tricks ==
 
== Tips & Tricks ==
  
=== Extending acpid with pm-utils ===
+
=== Estendere acpid tramite pm-utils ===
  
Although {{Codeline|acpid}} can provide basic suspend2ram out-of-the-box, a more robust system may be desired. [[Pm-utils]] provides a very flexible framework for suspend2ram (suspend) and suspend2disk (hibernate) operations, including common fixes for stubborn hardware and drivers (e.g. fglrx module). pm-utils provides two scripts, {{Codeline|pm-suspend}} and {{Codeline|pm-hibernate}}, both of which can be inserted as events into acpid. For more information, check the [[Pm-utils]] wiki.
+
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]].
  
=== Sample Events ===
+
=== Esempi di eventi ===
  
The following are samples of events that can be dropped into the existing {{filename|/etc/acpi/handler.sh}} script. '''Bolded''' text indicates modifications or additions to the default script. As noted above, your event labels may differ so some tweaking may be necessary.
+
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}}.
  
Activate Xscreensaver upon lid closure:
+
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'''''
+
        ;;
+
  
Suspend the system and lock the screen using slimlock when the lid is closed:
+
Sospendere il sistema e bloccare lo schermo utilizzando {{ic|slimlock}} 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
 +
              ;;
  
Execute {{Codeline|pm-suspend}} (from [[Pm-utils]]) when the Sleep button is pressed:
+
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
 
             ;;
 
             ;;
  
=== Laptop Monitor Power Off ===
+
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>}}
 +
 
 +
=== Abilitare il controllo della retroilluminazione ===
 +
 
 +
In maniera simile al controllo del volume, tramite acpid è possibile gestire la luminosità dello schermo. Per raggiungere ciò, si devono scrivere alcuni handler, come di seguito:
 +
 
 +
{{hc|/etc/acpi/handlers/bl|<nowiki>
 +
#!/bin/sh
 +
bl_dev=/sys/class/backlight/acpi_video0
 +
step=1
 +
 
 +
case $1 in
 +
  -) echo $((`cat $bl_dev/brightness` - $step)) >$bl_dev/brightness;;
 +
  +) echo $((`cat $bl_dev/brightness` + $step)) >$bl_dev/brightness;;
 +
esac
 +
</nowiki>}}
 +
 
 +
e ancora, collegare i tasti agli eventi ACPI:
 +
 
 +
{{hc|/etc/acpi/events/bl_d|<nowiki>
 +
event=video/brightnessdown
 +
action=/etc/acpi/handlers/bl -
 +
</nowiki>}}
 +
{{hc|/etc/acpi/events/bl_u|<nowiki>
 +
event=video/brightnessup
 +
action=/etc/acpi/handlers/bl +
 +
</nowiki>}}
 +
 
 +
=== Abilitare/disattivare Wi-fi ===
 +
 
 +
Si può anche creare un semplice handler che attiverà/disattiverà il wireless alla pressione del pulsante WLAN. Esempio dell'evento:
 +
 
 +
{{hc|/etc/acpi/events/wlan|<nowiki>
 +
event=button/wlan
 +
action=/etc/acpi/handlers/wlan
 +
</nowiki>}}
 +
 
 +
e il suo handler:
 +
 
 +
{{hc|/etc/acpi/handlers/wlan|<nowiki>
 +
#!/bin/sh
 +
rf=/sys/class/rfkill/rfkill0
 +
 
 +
case `cat $rf/state` in
 +
  0) echo 1 >$rf/state;;
 +
  1) echo 0 >$rf/state;;
 +
esac
 +
</nowiki>}}
 +
 
 +
=== 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 {{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.
  
Adapted from the [http://en.gentoo-wiki.com/wiki/ACPI/Configuration Gentoo Wiki] comes this little gem. Add this to the bottom of {{filename|/etc/acpi/actions/lm_lid.sh}} or to the ''button/lid'' section {{filename|/etc/acpi/handler.sh}}. This will turn off the LCD back-light when the lid is closed, and restart when the lid is opened.
 
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
 
  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 ;;
 
     closed) XAUTHORITY=$(ps -C xinit -f --no-header | sed -n 's/.*-auth //; s/ -[^ ].*//; p') xset -display :0 dpms force off ;;
Line 137: Line 237:
 
  esac
 
  esac
  
If you would like to increase/decrease brightness or anything dependent on X, you should specify the X display as well as the MIT magic cookie file (via XAUTHORITY). The last is a security credential providing read and write access to the X server, display, and any input devices.
+
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 (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:
  
With certain combinations of Xorg and stubborn hardware, ''xset dpms force off'' only blanks the display leaving the backlight turned on. This can be fixed using vbetool from the 'extra' repository. Change the LCD section to:
 
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
 
  case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
 
     closed) vbetool dpms off ;;
 
     closed) vbetool dpms off ;;
Line 145: Line 246:
 
  esac
 
  esac
  
If the monitor appears to shut off only briefly before being re-powered, very possibly the power management shipped with xscreensaver conflicts with any manual ''dpms'' settings.
 
  
=== Getting user name of the current display ===
+
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''.
You can use the function {{Codeline|getuser}} to acquire the user of the current display:
+
 
<pre>
+
=== Ottenere il nome utente del display corrente ===
getuser ()
+
 
    {
+
Ottenere il nome utente del display corrente
    export DISPLAY=`echo $DISPLAY | cut -c -2`
+
 
    user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1`
+
È possibile utilizzare la funzione {{ic|getuser}} per acquisire la visualizzazione dell'utente corrente:
    export XAUTHORITY=/home/$user/.Xauthority
+
getuser ()
    eval $1=$user
+
    {
}
+
      export DISPLAY=`echo $DISPLAY | cut -c -2`
</pre>
+
      user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1`
This function can be used for example, when you press the power button and want to shutdown KDE properly:
+
      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 (ITaliano)|KDE]] effettui lo spegnimento correttamente:
 +
 
 
  button/power)
 
  button/power)
 
     case "$2" in
 
     case "$2" in
Line 170: Line 275:
 
     ;;
 
     ;;
  
== More Resources ==
+
 
 +
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].
 +
 
 +
=== Tasti di scelta rapida ACPI ===
 +
E' possibile o modificare a mano {{ic|/etc/acpi/handler.sh}}, per reagire agli eventi ACPI, oppure lo si può far puntare ad un altro script (i.e.  {{ic|/etc/acpi/hotkeys.sh}})
 +
 
 +
Nella sezione:
 +
case "$1" in
 +
 
 +
Aggiungi le seguenti righe:
 +
hkey)
 +
case "$4" in
 +
00000b31)
 +
echo "PreviousButton pressed!"
 +
exailectl p
 +
;;
 +
00000b32)
 +
echo "NextButton pressed!"
 +
exailectl n
 +
;;
 +
00000b33)
 +
echo "Play/PauseButton pressed!"
 +
exailectl pp
 +
echo "executed.."
 +
;;
 +
00000b30)
 +
echo "StopButton pressed!"
 +
exailectl s
 +
;;
 +
*)
 +
echo "Hotkey Else: $4"
 +
;;
 +
esac
 +
;;
 +
 +
I valori '00000b31' (ecc. ecc.) sono ottenuti tramite acpi_listen.
 +
 
 +
Esiste anche lo script exailectl, un breve script shell che ho creato per controllare il music player Exaile. Siccome ACPID è avviato da utente root, si dovrà utilizzare
 +
sudo -u (username) exaile
 +
per esempio, altrimenti non verrà rilevato il programma a livello utente e ne verrà creato un altro.
 +
 
 +
== 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
+
* [[ACPI hotkeys]]

Revision as of 14:36, 15 May 2013

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.

Note:
  • ambienti desktop, come GNOME, systemd login manager e alcuni demoni digestione dei tasti extra potrebbero implementare degli schemi per la gestione degli eventi propri, in maniera indipendente da acpid. Eseguendo più di un sistema alla volta, potrebbe provocare comportamenti inaspettati, come una sospensione doppia, due volte in fila dopo una pressione del pulsante per la sospensione. Si dovrebbe essere consapevoli di ciò, e abilitare solamente i gestori desiderati.
  • Siccome di default lo script installato da acpid, /etc/acpi/handler.sh, sovrascriverà la funzionalità alla pressione del pulsante di accensione del tuo ambiente desktop, probabilmente vorrai cambiare la routine di acpid, per evitare di spegnere il sistema alla pressione inavvertita del pulsante di accensione.(leggi le istruzioni sotto).

Installazione

Installare il pacchetto acpid reperibile nei repository ufficiali.

Per averlo avviato all'accensione del sistema, usando systemd :

# systemctl enable acpid

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

Abilitare il controllo della retroilluminazione

In maniera simile al controllo del volume, tramite acpid è possibile gestire la luminosità dello schermo. Per raggiungere ciò, si devono scrivere alcuni handler, come di seguito:

/etc/acpi/handlers/bl
#!/bin/sh
bl_dev=/sys/class/backlight/acpi_video0
step=1

case $1 in
  -) echo $((`cat $bl_dev/brightness` - $step)) >$bl_dev/brightness;;
  +) echo $((`cat $bl_dev/brightness` + $step)) >$bl_dev/brightness;;
esac

e ancora, collegare i tasti agli eventi ACPI:

/etc/acpi/events/bl_d
event=video/brightnessdown
action=/etc/acpi/handlers/bl -
/etc/acpi/events/bl_u
event=video/brightnessup
action=/etc/acpi/handlers/bl +

Abilitare/disattivare Wi-fi

Si può anche creare un semplice handler che attiverà/disattiverà il wireless alla pressione del pulsante WLAN. Esempio dell'evento:

/etc/acpi/events/wlan
event=button/wlan
action=/etc/acpi/handlers/wlan

e il suo handler:

/etc/acpi/handlers/wlan
#!/bin/sh
rf=/sys/class/rfkill/rfkill0

case `cat $rf/state` in
  0) echo 1 >$rf/state;;
  1) echo 0 >$rf/state;;
esac

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.

Tasti di scelta rapida ACPI

E' possibile o modificare a mano /etc/acpi/handler.sh, per reagire agli eventi ACPI, oppure lo si può far puntare ad un altro script (i.e. /etc/acpi/hotkeys.sh)

Nella sezione:

case "$1" in

Aggiungi le seguenti righe:

hkey)
	case "$4" in
		00000b31)
		echo "PreviousButton pressed!"
		exailectl p
		;;
	00000b32)
		echo "NextButton pressed!"
		exailectl n
		;;
	00000b33)
		echo "Play/PauseButton pressed!"
		exailectl pp
		echo "executed.."
		;;
	00000b30)
		echo "StopButton pressed!"
		exailectl s
		;;
	*)
		echo "Hotkey Else: $4"
		;;
	esac
	;;

I valori '00000b31' (ecc. ecc.) sono ottenuti tramite acpi_listen.

Esiste anche lo script exailectl, un breve script shell che ho creato per controllare il music player Exaile. Siccome ACPID è avviato da utente root, si dovrà utilizzare

sudo -u (username) exaile

per esempio, altrimenti non verrà rilevato il programma a livello utente e ne verrà creato un altro.

Altre risorse