Difference between revisions of "Acpid (Español)"

From ArchWiki
Jump to: navigation, search
m ({translateme}} label out)
m (writing language corrections, mixed spanish with english)
 
(10 intermediate revisions by 5 users not shown)
Line 3: Line 3:
 
[[en:Acpid]]
 
[[en:Acpid]]
 
[[it:Acpid]]
 
[[it:Acpid]]
[[zh-CN:Acpid]]
+
[[ja:Acpid]]
 +
[[ru:Acpid]]
 +
[[zh-cn:Acpid]]
 +
[http://acpid.sourceforge.net/ acpid] es un "demonio" flexible y extensible para entregar [[ACPI modules (Español)|eventos ACPI]]. Vigila {{ic|/proc/acpi/event}} y cuando hay un evento, ejecuta programas para manejarlo. Estos eventos se activan mediante ciertas acciones, como:
 +
* Presionar teclas especiales, incluyendo el botón de Encendido/Hibernar/Suspender.
 +
* Cerrando la tapa del portátil
 +
* Desconectar un adaptador de Corriente Alterna a un portátil.
 +
* Desconectar un jack de un teléfono, etc.
  
[http://acpid.sourceforge.net/ acpid] es un "demonio" flexible y extensible para entregar for delivering [[ACPI modules (Español)|eventos ACPI]]. Vigila {{ic|/proc/acpi/event}} y cuando hay un evento, ejecuta programas para manejarlo.  when an event occurs, executes programs to handle the event. Estos eventos se activan mediante ciertas acciones, como:
+
'''acpid''' puede ser usado así mismo, o combinado con un sistema más robusto como [[pm-utils (Español)|pm-utils]] y [[CPU frequency scaling (Español)|cpufrequtils]] para una mayor solución del control de energía.
* Apretar teclas especiales, incluyendo el boton de Encendido/Hibernar/Suspender.
+
* Closing a notebook lid
+
* (Des)conectar un adaptador de Corriente Alterna a un portátil.
+
* (Des)conectar un jack de un teléfono, etc.
+
 
+
acpid puede ser usado asi mismo, o combinado con un sistema más robusto como [[pm-utils (Español)|pm-utils]] y [[CPU Frequency Scaling (Español)|cpufrequtils]] para una mayor solución del control de energía.
+
  
 
{{Nota|
 
{{Nota|
* [[Desktop Environment (Español)|Entornos de escritorio]], como [[GNOME (Español)|GNOME]], gestor de inicio de sesión de [[Systemd (Español)#ACPI administración de la energía|systemd]] y algunos demonios [[Extra Keyboard Keys (Español)|manejadores de teclas extra]] pueden implementar métodos propios de manejo de eventos, independientemente de acpid. Usar más de un sistema a la vez puede provocar un comportamiento inesperado, como suspenderse dos veces de una, tras apretar una vez el botón de hibernar. Ten esto en cuenta y activa solo manejadores deseados.
+
* [[Desktop environment (Español)|Entornos de escritorio]], como [[GNOME (Español)|GNOME]], gestor de inicio de sesión de [[Systemd (Español)#ACPI administración de la energía|systemd]]{{Broken section link}} y algunos demonios [[Extra Keyboard Keys (Español)|manejadores de teclas extra]] pueden implementar métodos propios de manejo de eventos, independientemente de acpid. Usar más de un sistema a la vez puede provocar un comportamiento inesperado, como suspenderse dos veces de una, tras apretar una vez el botón de hibernar. Ten esto en cuenta y activa solo manejadores deseados.
* Ya que por defecto el script que provee acpid, '''/etc/acpi/handler.sh''', sobreescribirá la funcionalidad del botón de encendido/apagado de tu entorno de escritorio, seguramente querrás cambiar la rutina de apagado de acpid para evitar apagar el ordenador cuando apretes de golpe cuando apretes el botón de encendido/apagado (ver instrucciones a continuación).}}
+
* Ya que por defecto el script que provee acpid, '''/etc/acpi/handler.sh''', sobrescribirá la funcionalidad del botón de encendido/apagado de tu entorno de escritorio, seguramente querrás cambiar la rutina de apagado de acpid para evitar apagar el ordenador cuando presiones de golpe el botón de encendido/apagado (ver instrucciones a continuación).}}
  
 
== Instalación ==
 
== Instalación ==
  
[[pacman (Español)|Instala]] el paquete {{Pkg|acpid}}, disponible en los [[Official Repositories (Español)|repositorios oficiales]].
+
[[pacman (Español)|Instala]] el paquete {{Pkg|acpid}}, disponible en los [[Official repositories (Español)|repositorios oficiales]].
  
Para que inicie al arranque :
+
Para que empiece el arranque :
* Si usas [[systemd]] (seguramente), pon en un terminal {{ic|systemctl enable acpid}} ;
+
* Si usas [[systemd]] (seguramente), ingresa en un terminal {{ic|systemctl enable acpid}} ;
* Si usas [[rc.conf|initscripts]], edita {{ic|/etc/rc.conf}} como superusuario y añade {{ic|acpid}} a la[[Rc.conf_(Español)#Demonios|variable DAEMONS]].
+
* Si usas [[rc.conf|initscripts]], edita {{ic|/etc/rc.conf}} como superusuario y añade {{ic|acpid}} a la variable DAEMONS.
  
 
== Configuración ==
 
== Configuración ==
  
{{Pkg|acpid}} viene con un número de acciones predefinidas para eventos activos, como lo qué debería occurrir cuando apretas el botón de encendido/apagado en tu ordenador. Por defecto, esas acciones están definidas en {{ic|/etc/acpi/handler.sh}}, que se ejecuta después de que se detecta un evento ACPI (según determine {{ic|/etc/acpi/events/anything}}).
+
{{Pkg|acpid}} viene con un número de acciones predefinidas para eventos activos, como lo qué debería occurrir cuando se presiona el botón de encendido/apagado en el ordenador. Por defecto, esas acciones están definidas en {{ic|/etc/acpi/handler.sh}}, que se ejecuta después de que se detecta un evento ACPI (según determine {{ic|/etc/acpi/events/anything}}).
  
Lo siguiente es un ejemplo de una acción.  En este caso, cuando se apreta el botón de Hibernar, acpid ejecuta el comando  {{ic|echo -n mem >/sys/power/state}}, que ''debería'' poner el ordenador en un estado de hibernación (suspendido):
+
Lo siguiente es un ejemplo de una acción.  En este caso, cuando se presiona el botón de Hibernar, acpid ejecuta el comando  {{ic|echo -n mem >/sys/power/state}}, que ''debería'' poner el ordenador en un estado de hibernación (suspendido):
  
 
  button/sleep)
 
  button/sleep)
Line 38: Line 39:
 
     ;;
 
     ;;
  
Desafortunadamente, no todos los ordenadores etiquetan los eventos ACPI de la misma forma. Por ejemplo, el botón Hibernar puede identificarse en un PC como ''SLPB'' y en otra como ''SBTN''.  
+
Desafortunadamente, no todos los ordenadores etiquetan los eventos ACPI de la misma forma. Por ejemplo, el botón Hibernar puede identificarse en un PC como ''SLPB'' y en otra como ''SBTN''.
  
Para determinar como son reconocidos tus botones o atajos de {{Keypress|teclado}}, ejecuta el diguiente comando en un terminal como root:
+
Para determinar como son reconocidos tus botones o atajos de {{ic|teclado}}, ejecuta el siguiente comando en un terminal como root:
 
  # tail -f /var/log/messages.log
 
  # tail -f /var/log/messages.log
  
Ahora apreta el botón de Encendido y/o el botón de Hibernar (p. ej. {{Keypress|Ctrl+Alt+Supr}}) de tu PC. El resultado debería ser algo asi:
+
Ahora presione el botón de Encendido y/o el botón de Hibernar (p. ej. {{ic|Ctrl+Alt+Supr}}) de la PC. El resultado debería ser algo asi:
 
  logger: ACPI action undefined: PBTN
 
  logger: ACPI action undefined: PBTN
 
  logger: ACPI action undefined: SBTN
 
  logger: ACPI action undefined: SBTN
  
Si no funciona, pon:
+
Si no funciona, intenta:
 
  # acpi_listen
 
  # acpi_listen
  
Entonces apreta el botón de Encendido/Apagado y verás algo así:
+
Entonces presione el botón de Encendido/Apagado y se verá algo así:
 
  power/button PBTN 00000000 00000b31
 
  power/button PBTN 00000000 00000b31
  
Line 60: Line 61:
 
  $4 00000b31
 
  $4 00000b31
  
Como ya te habrás dado cuando, el botón de Hibernar en la salida de ejemplo es reconocido como ''SBTN'', en lugar de la etiqueta ''SLPB'' especificada en archivo {{ic|/etc/acpi/handler.sh}} por defecto.  Para hacer que el botón de Hibernar funcione correctamente en este PC, necesitaremos reemplazar ''SLPB)'' con ''SBTN)''.
+
Como se puede observar, el botón de Hibernar en la salida de ejemplo es reconocido como ''SBTN'', en lugar de la etiqueta ''SLPB'' especificada en archivo {{ic|/etc/acpi/handler.sh}} por defecto.  Para hacer que el botón de Hibernar funcione correctamente en el PC, necesitaremos reemplazar ''SLPB)'' con ''SBTN)''.
  
Usando esto como base, puedes personalizar fácilmente el archivo {{ic|/etc/acpi/handler.sh}} para ejecutar una variedad de comandos dependiendo de que evento es ejecutado. Mira la sección [[Acpid Español)#Trucos y Sugerencias | Trucos y Sugerencias]] a continuación para otros comandos usados comúnmente.
+
Usando esto como base, se puede personalizar fácilmente el archivo {{ic|/etc/acpi/handler.sh}} para ejecutar una variedad de comandos dependiendo de que evento es ejecutado. Mira la sección [[#Trucos y Sugerencias]] a continuación para otros comandos usados comúnmente.
  
 
=== Configuración alternativa ===
 
=== Configuración alternativa ===
Line 94: Line 95:
  
 
==Trucos y Sugerencias==
 
==Trucos y Sugerencias==
{{Sugerencia|Algunas acciones descritas aquí, como el control del Wi-Fi y del brillo, pueden ser controlados directamente por tus drivers. Deberías consultas la documentación de los módulos del kernel correspondientes cuando este sea el caso.}}
+
{{Sugerencia|Algunas acciones descritas aquí, como el control del Wi-Fi y del brillo, pueden ser controlados directamente por los drivers. Deberías consultar la documentación de los módulos del kernel correspondientes cuando este sea el caso.}}
  
 
===Ampliando acpid con pm-utils===
 
===Ampliando acpid con pm-utils===
  
Aunque {{Pkg|acpid}} puede proveer una función de suspendido básica, podrías desear un sistema más robusto.  [[pm-utils (Español)|pm-utils]] provee una estructura muy flexible suspender e hibernar, incluyendo soluciones para hardware y drivers tercos (p. ej. módulos fglrx). pm-utils provee dos scripts, {{ic|pm-suspend}} y {{ic|pm-hibernate}}, los cuales pueden ser insertados como eventos en acpid. Para más informacón lee el wiki [[pm-utils]] wiki.
+
Aunque {{Pkg|acpid}} puede proveer una función de suspendido básica, se podría desear un sistema más robusto.  [[pm-utils (Español)|pm-utils]] provee una estructura muy flexible suspender e hibernar, incluyendo soluciones para hardware y drivers tercos (p. ej. módulos fglrx). pm-utils provee dos scripts, {{ic|pm-suspend}} y {{ic|pm-hibernate}}, los cuales pueden ser insertados como eventos en acpid. Para más información lee el wiki [[pm-utils]] wiki.
  
 
===Eventos de Ejemplo===
 
===Eventos de Ejemplo===
  
Los siguientes son ejemplos de eventos que pueden ser usados en el script {{ic|/etc/acpi/handler.sh}}. Estos ejemplos deberían ser modificados para que se ajusten a tu entorno específico, por ejemplo cambiando los nombres de las variables de evento tal y como las interprete {{ic|acpi_listen}}.
+
Los siguientes son ejemplos de eventos que pueden ser usados en el script {{ic|/etc/acpi/handler.sh}}. Estos ejemplos deberían ser modificados para que se ajusten a el entorno específico, por ejemplo cambiando los nombres de las variables de evento tal y como las interprete {{ic|acpi_listen}}.
  
Para bloquear la pantalla con {{ic|xscreensaver}} cuando cierres la tapa del portátil pon:
+
Para bloquear la pantalla con {{ic|xscreensaver}} cuando se cierra la tapa del portátil intenta:
  
 
  button/lid)
 
  button/lid)
Line 126: Line 127:
 
             ;;
 
             ;;
  
Execute {{ic|pm-suspend}} when the sleep button is pressed:
+
Ejecuta {{ic|pm-suspend}} cuando se presiona el botón de suspensión.
  
 
  button/sleep)
 
  button/sleep)
Line 135: Line 136:
 
             ;;
 
             ;;
  
Para ajustar el brillo del portátil según este conectado a la corriente o no (deberías ajustar los números, mira {{ic|/sys/class/backlight/acpi_video0/max_brightness}}):
+
Para ajustar el brillo del portátil según este conectado a la corriente o no (se debería ajustar los números, mira {{ic|/sys/class/backlight/acpi_video0/max_brightness}}):
  
 
  ac_adapter)
 
  ac_adapter)
Line 151: Line 152:
 
=== Activar el control del volumen ===
 
=== Activar el control del volumen ===
  
Descubre la identificación de acpi de los botones del volunes (mira a continuación) y sustituye los eventos acpi en los archivos a continuación. Creamos un script para controlar el volumen (asumiendo que usas una tarjeta de sonido con [[ALSA (Español)]]):
+
Descubre la identificación de acpi de los botones de volumen (mira a continuación) y sustituye los eventos acpi en los archivos a continuación. Creamos un script para controlar el volumen (asumiendo que se usa una tarjeta de sonido con [[ALSA (Español)]]):
  
 
{{hc|/etc/acpi/handlers/vol|<nowiki>
 
{{hc|/etc/acpi/handlers/vol|<nowiki>
Line 183: Line 184:
 
=== Activar el control del brillo ===
 
=== Activar el control del brillo ===
  
Parecido al control del volumen, acpid también te permite controlar el brillo de tu pantalla. Para conseguir esto escribe algún script, como este:
+
Parecido al control del volumen, acpid también permite controlar el brillo de la pantalla. Para conseguir esto escribe un script como el siguiente:
  
 
{{hc|/etc/acpi/handlers/bl|<nowiki>
 
{{hc|/etc/acpi/handlers/bl|<nowiki>
Line 209: Line 210:
 
=== Habilitar el control del Wi-Fi ===
 
=== Habilitar el control del Wi-Fi ===
  
También puedes crear un sencillo controlador wireless apretando los botones WLAN. Un ejemplo de evento:
+
También se puede crear un sencillo controlador wireless presionando los botones WLAN. Un ejemplo de evento:
  
 
{{hc|/etc/acpi/events/wlan|<nowiki>
 
{{hc|/etc/acpi/events/wlan|<nowiki>
Line 230: Line 231:
 
=== Apagar la pantalla del portátil ===
 
=== Apagar la pantalla del portátil ===
  
Adaptado del [http://en.gentoo-wiki.com/wiki/ACPI/Configuration|Wiki de Gentoo], viene esta pequeña perla. Añade esto al final de {{ic|/etc/acpi/actions/lm_lid.sh}} o a la sección ''button/lid'' {{ic|/etc/acpi/handler.sh}}. Esto apagará la luz de la pantalla cuando la tapa esté cerrada, y la encenderá cuando la tapa se abra.
+
Adaptado del [http://www.gentoo-wiki.info/ACPI/Configuration|Wiki de Gentoo], viene esta pequeña perla. Añade esto al final de {{ic|/etc/acpi/actions/lm_lid.sh}} o a la sección ''button/lid'' {{ic|/etc/acpi/handler.sh}}. Esto apagará la luz de la pantalla cuando la tapa esté cerrada, y la encenderá cuando la tapa se abra.
 
  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 236: Line 237:
 
  esac
 
  esac
  
Si quieres incrementar/disminuir el brillo o algo que dependa de X, debes especificarel monitor con X y también el archivo MIT magic cookie (via XAUTHORITY). Lo último es una credencial de seguridad que provee acceso de escritura y lectura al servidor X, monitor, y dispositivos de entrada.
+
Si se quiere incrementar/disminuir el brillo o algo que dependa de X, se debe especificar el monitor con X y también el archivo MIT magic cookie (via XAUTHORITY). Lo último es una credencial de seguridad que provee acceso de escritura y lectura al servidor X, monitor, y dispositivos de entrada.
  
 
Aquí hay otro script que no usa XAUTHORITY sino sudo:
 
Aquí hay otro script que no usa XAUTHORITY sino sudo:
Line 245: Line 246:
 
  esac
 
  esac
  
Con ciertas combinaciones de [[Xorg (Español)|Xorg]] y hardware problemático, {{ic|xset dpms force off}} solo deja en blanco la pantalla dejando la luz encendida. Esto puede ser corregido usando {{Pkg|vbetool}} de los [[Official Repositories (Español)|repositorios oficiales]]. Cambia la sección LCD a:
+
Con ciertas combinaciones de [[Xorg (Español)|Xorg]] y hardware problemático, {{ic|xset dpms force off}} solo deja en blanco la pantalla dejando la luz encendida. Esto puede ser corregido usando {{Pkg|vbetool}} de los [[Official repositories (Español)|repositorios oficiales]]. Cambia la sección LCD a:
 
  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 254: Line 255:
  
 
=== Sacar el nombre de usuario del monitor actual ===
 
=== Sacar el nombre de usuario del monitor actual ===
Puedes usar la función {{ic|getuser}} para descubrir el usuario del monitor actual:
+
Se puede usar la función {{ic|getuser}} para descubrir el usuario del monitor actual:
 
  getuser ()
 
  getuser ()
 
     {
 
     {
Line 263: Line 264:
 
     }
 
     }
  
Se puede usar esta función, por ejemplo, cuando apretas el botón de Encendido/Apagado, y quieres apagar [[KDE (Español)| KDE]] correctamente:
+
Se puede usar esta función, por ejemplo, cuando se presiona el botón de Encendido/Apagado, y se requiere apagar [[KDE (Español)|KDE]] correctamente:
 
  button/power)
 
  button/power)
 
     case "$2" in
 
     case "$2" in
Line 276: Line 277:
  
  
En sistemas más nuevos usando systemd, los accesos a X11 no son necesariamente mostrados en {{ic|who}}, de manera que la función {{ic|getuser}} no funciona. Una alternativa es usar {{ic|loginctl}} para obtener la información requerida (p.ej. usando [https://github.com/rephorm/xuserrun xuserrun].
+
En sistemas más nuevos usando systemd, los accesos a X11 no son necesariamente mostrados en {{ic|who}}, de manera que la función {{ic|getuser}} no sirve. Una alternativa es usar {{ic|loginctl}} para obtener la información requerida (p.ej. usando [https://github.com/rephorm/xuserrun xuserrun].
  
 
==Ver también==
 
==Ver también==
  
 
* http://acpid.sourceforge.net/ - página de acpid
 
* http://acpid.sourceforge.net/ - página de acpid
* http://www.gentoo-wiki.info/ACPI/Configuration
+
* [http://www.gentoo-wiki.info/ACPI/Configuration Gentoo wiki]
 
* [[ACPI hotkeys (Español)|ACPI hotkeys]]
 
* [[ACPI hotkeys (Español)|ACPI hotkeys]]

Latest revision as of 03:20, 5 October 2016

acpid es un "demonio" flexible y extensible para entregar eventos ACPI. Vigila /proc/acpi/event y cuando hay un evento, ejecuta programas para manejarlo. Estos eventos se activan mediante ciertas acciones, como:

  • Presionar teclas especiales, incluyendo el botón de Encendido/Hibernar/Suspender.
  • Cerrando la tapa del portátil
  • Desconectar un adaptador de Corriente Alterna a un portátil.
  • Desconectar un jack de un teléfono, etc.

acpid puede ser usado así mismo, o combinado con un sistema más robusto como pm-utils y cpufrequtils para una mayor solución del control de energía.

Nota:
  • Entornos de escritorio, como GNOME, gestor de inicio de sesión de systemd[broken link: invalid section] y algunos demonios manejadores de teclas extra pueden implementar métodos propios de manejo de eventos, independientemente de acpid. Usar más de un sistema a la vez puede provocar un comportamiento inesperado, como suspenderse dos veces de una, tras apretar una vez el botón de hibernar. Ten esto en cuenta y activa solo manejadores deseados.
  • Ya que por defecto el script que provee acpid, /etc/acpi/handler.sh, sobrescribirá la funcionalidad del botón de encendido/apagado de tu entorno de escritorio, seguramente querrás cambiar la rutina de apagado de acpid para evitar apagar el ordenador cuando presiones de golpe el botón de encendido/apagado (ver instrucciones a continuación).

Instalación

Instala el paquete acpid, disponible en los repositorios oficiales.

Para que empiece el arranque :

  • Si usas systemd (seguramente), ingresa en un terminal systemctl enable acpid ;
  • Si usas initscripts, edita /etc/rc.conf como superusuario y añade acpid a la variable DAEMONS.

Configuración

acpid viene con un número de acciones predefinidas para eventos activos, como lo qué debería occurrir cuando se presiona el botón de encendido/apagado en el ordenador. Por defecto, esas acciones están definidas en /etc/acpi/handler.sh, que se ejecuta después de que se detecta un evento ACPI (según determine /etc/acpi/events/anything).

Lo siguiente es un ejemplo de una acción. En este caso, cuando se presiona el botón de Hibernar, acpid ejecuta el comando echo -n mem >/sys/power/state, que debería poner el ordenador en un estado de hibernación (suspendido):

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

Desafortunadamente, no todos los ordenadores etiquetan los eventos ACPI de la misma forma. Por ejemplo, el botón Hibernar puede identificarse en un PC como SLPB y en otra como SBTN.

Para determinar como son reconocidos tus botones o atajos de teclado, ejecuta el siguiente comando en un terminal como root:

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

Ahora presione el botón de Encendido y/o el botón de Hibernar (p. ej. Ctrl+Alt+Supr) de la PC. El resultado debería ser algo asi:

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

Si no funciona, intenta:

# acpi_listen

Entonces presione el botón de Encendido/Apagado y se verá algo así:

power/button PBTN 00000000 00000b31

La salida de acpi_listen se envía a /etc/acpi/handler.sh como parámetros $1, $2 , $3 & $4.. Ejemplo:

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

Como se puede observar, el botón de Hibernar en la salida de ejemplo es reconocido como SBTN, en lugar de la etiqueta SLPB especificada en archivo /etc/acpi/handler.sh por defecto. Para hacer que el botón de Hibernar funcione correctamente en el PC, necesitaremos reemplazar SLPB) con SBTN).

Usando esto como base, se puede personalizar fácilmente el archivo /etc/acpi/handler.sh para ejecutar una variedad de comandos dependiendo de que evento es ejecutado. Mira la sección #Trucos y Sugerencias a continuación para otros comandos usados comúnmente.

Configuración alternativa

Por defecto, todos los eventos ACPI pasan por el script /etc/acpi/handler.sh. Esto se debe al conjunto de reglas escritas en /etc/acpi/events/anything:

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

Aunque esto funciona muy bien como está, algunos usuarios pueden preferir definir reglas de evento y acciones en sus propios scrpits independientes. Lo siguiente es un ejemplo de cómo usar un archivo de evento individual y su correspondiente script de acción:

Como superusuario, crea el archivo siguiente:

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

Ahora crea el siguinte archivo:

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

Finalmente, haz el script ejecutable:

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

Usando este método, es fácil crear los scripts de eventos/acciones individuales que quieras.

Trucos y Sugerencias

Sugerencia: Algunas acciones descritas aquí, como el control del Wi-Fi y del brillo, pueden ser controlados directamente por los drivers. Deberías consultar la documentación de los módulos del kernel correspondientes cuando este sea el caso.

Ampliando acpid con pm-utils

Aunque acpid puede proveer una función de suspendido básica, se podría desear un sistema más robusto. pm-utils provee una estructura muy flexible suspender e hibernar, incluyendo soluciones para hardware y drivers tercos (p. ej. módulos fglrx). pm-utils provee dos scripts, pm-suspend y pm-hibernate, los cuales pueden ser insertados como eventos en acpid. Para más información lee el wiki pm-utils wiki.

Eventos de Ejemplo

Los siguientes son ejemplos de eventos que pueden ser usados en el script /etc/acpi/handler.sh. Estos ejemplos deberían ser modificados para que se ajusten a el entorno específico, por ejemplo cambiando los nombres de las variables de evento tal y como las interprete acpi_listen.

Para bloquear la pantalla con xscreensaver cuando se cierra la tapa del portátil intenta:

button/lid)
    case $3 in
        close)
            # The lock command need to be run as the user who owns the xscreensaver process and not as root.
            # See: man xscreensaver-command. $xs will have the value of the user owning the process, if any.

            xs=$(ps -C xscreensaver -o user=)
            if test $xs; then su $xs -c "xscreensaver-command -lock"; fi
            ;;

Para suspender el sistema y bloquear la pantalla usando slimlock cuando la tapa está cerrada:

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

Ejecuta pm-suspend cuando se presiona el botón de suspensión.

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

Para ajustar el brillo del portátil según este conectado a la corriente o no (se debería ajustar los números, mira /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

Activar el control del volumen

Descubre la identificación de acpi de los botones de volumen (mira a continuación) y sustituye los eventos acpi en los archivos a continuación. Creamos un script para controlar el volumen (asumiendo que se usa una tarjeta de sonido con ALSA (Español)):

/etc/acpi/handlers/vol
#!/bin/sh
step=5

case $1 in
  -) amixer set Master $step-;;
  +) amixer set Master $step+;;
esac

Y conectalos a nuevos eventos acpi:

/etc/acpi/events/vol_d
event=button/volumedown
action=/etc/acpi/handlers/vol -
/etc/acpi/events/vol_u
event=button/volumeup
action=/etc/acpi/handlers/vol +

También otro evento para silenciar:

/etc/acpi/events/mute
event=button/mute
action=/usr/bin/amixer set Master toggle

Activar el control del brillo

Parecido al control del volumen, acpid también permite controlar el brillo de la pantalla. Para conseguir esto escribe un script como el siguiente:

/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

y otra vez, conecta las teclas a eventos 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 +

Habilitar el control del Wi-Fi

También se puede crear un sencillo controlador wireless presionando los botones WLAN. Un ejemplo de evento:

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

y su script manejador:

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

case `cat $rf/state` in
  0) echo 1 >$rf/state && systemctl start net-auto-wireless;;
  1) systemctl stop net-auto-wireless && echo 0 >$rf/state;;
esac

Apagar la pantalla del portátil

Adaptado del de Gentoo, viene esta pequeña perla. Añade esto al final de /etc/acpi/actions/lm_lid.sh o a la sección button/lid /etc/acpi/handler.sh. Esto apagará la luz de la pantalla cuando la tapa esté cerrada, y la encenderá cuando la tapa se abra.

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

Si se quiere incrementar/disminuir el brillo o algo que dependa de X, se debe especificar el monitor con X y también el archivo MIT magic cookie (via XAUTHORITY). Lo último es una credencial de seguridad que provee acceso de escritura y lectura al servidor X, monitor, y dispositivos de entrada.

Aquí hay otro script que no usa XAUTHORITY sino sudo:

case $(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') in
    closed) sudo -u `ps -o ruser= -C xinit` xset -display :0 dpms force off ;;
    open)   sudo -u `ps -o ruser= -C xinit` xset -display :0 dpms force on  ;;
esac

Con ciertas combinaciones de Xorg y hardware problemático, xset dpms force off solo deja en blanco la pantalla dejando la luz encendida. Esto puede ser corregido usando vbetool de los repositorios oficiales. Cambia la sección LCD a:

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

Si el monitor se apaga solo brevemente y después se enciende, seguramente sea el control de energía que viene con xscreensaver, que entra en conflicto con los ajustes manuales de dpm'.

Sacar el nombre de usuario del monitor actual

Se puede usar la función getuser para descubrir el usuario del monitor actual:

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
    }

Se puede usar esta función, por ejemplo, cuando se presiona el botón de Encendido/Apagado, y se requiere apagar KDE correctamente:

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


En sistemas más nuevos usando systemd, los accesos a X11 no son necesariamente mostrados en who, de manera que la función getuser no sirve. Una alternativa es usar loginctl para obtener la información requerida (p.ej. usando xuserrun.

Ver también