Acpid (Italiano)

From ArchWiki
Revision as of 17:13, 15 October 2011 by Veleno77 (Talk | contribs) (tradotto metà articolo)

Jump to: navigation, search

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Acpid (Italiano)#)

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 cpufrequtils per fornire una più completa soluzione di gestione dell'alimentazione.

Installazione

Il pacchetto Template:Package Official è reperibile in [extra].

Modificare il file Template:Filename da root e aggiungere acpid alla stringa DAEMONS in modo che venga eseguito all'avvio 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 Template:Filename, e vengono eseguite dopo qualsiasi evento ACPI rilevato (come determinato da Template:Filename).

Quello che segue è un breve esempio di una azione. In questo caso, quando si preme il pulsante Sleep, acpid esegue il comando Template:Codeline 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 Fn 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. Fn+Esc) 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 Template:Codeline viene inviato allo script Template:Filename 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 Template:Filename. 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 Template:Filename 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 Template:Filename. Ciò è dovuto al set di regole delineate nel file Template:Filename:

 # 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 e modificare il file: Template:Filename. Aggiungendo quanto segue:

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

Allo stesso modo creare e modificare il file: Template:Filename. Aggiungendo:

#!/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

Extending acpid with pm-utils

Although Template:Codeline 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, Template:Codeline and Template:Codeline, both of which can be inserted as events into acpid. For more information, check the Pm-utils wiki.

Sample Events

The following are samples of events that can be dropped into the existing Template:Filename 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.

Activate Xscreensaver upon lid closure:

button/lid)
    #echo "LID switched!">/dev/tty5
        IS_ACTIVE="$( pidof /usr/bin/xscreensaver )"

        if [ -n "$IS_ACTIVE" ]
        then
            # 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:

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

Execute Template:Codeline (from Pm-utils) when the Sleep button is pressed:

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

Laptop Monitor Power Off

Adapted from the Gentoo Wiki comes this little gem. Add this to the bottom of Template:Filename or to the button/lid section Template:Filename. 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
    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

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.

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
    closed) vbetool dpms off ;;
    open)   vbetool dpms on  ;;
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

You can use the function Template:Codeline to acquire the user of the current display:

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
}

This function can be used for example, when you press the power button and want to shutdown KDE properly:

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

More Resources