acpid (Español)

Esta traducción de
Acpid
fue revisada el
2022-11-03
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Módulos ACPI
DSDT
acpid2
es un demonio flexible y extensible para entregar
eventos ACPI
. Cuando ocurre un evento, ejecuta programas para manejarlo. Estos eventos son desencadenados por ciertas acciones, tales como:
Presionando teclas especiales, incluido el botón de Encendido/Suspensión/Hibernación
Cerrando la tapa de un portátil
(Des)Enchufando un adaptador de corriente de un portátil
(Des)Enchufando el conector del teléfono (módem), etc.
Nota
Los
entornos de escritorio
, como
GNOME
, el administrador de inicio de sesión de
systemd
y algunos demonios (daemons) que
manejan teclas extra
pueden implementar sus propios esquemas de gestión de eventos, independientes de acpid. La ejecución de más de un sistema al mismo tiempo puede provocar un comportamiento inesperado, como suspender dos veces seguidas después de presionar un botón de suspensión. Tenga esto en cuenta y active solo los manejadores que necesite.
Instalación
Instale
el paquete
acpid
. Entonces
inicie/active
acpid.service
.
Configuración
acpid
viene con una serie de acciones predefinidas para eventos activados, como lo que debería suceder cuando presionas el botón de encendido en tu máquina. De forma predeterminada, estas acciones se definen en
/etc/acpi/handler.sh
, que se ejecuta después de detectar cualquier evento ACPI (según lo determinado por
/etc/acpi/events/anything
)
Lo siguiente es un pequeño ejemplo de una acción de este tipo. En este caso, cuando se presiona el botón de Suspensión, acpid ejecuta la orden
echo -n mem >/sys/power/state
que
debería
colocar la computadora en un estado de suspensión (hibernación):
button/sleep)
    case "$2" in
        SLPB) echo -n mem >/sys/power/state ;;
	 *)    logger "ACPI action undefined: $2" ;;
    esac
    ;;
Desafortunadamente, no todas las computadoras etiquetan los eventos ACPI de la misma manera. Por ejemplo, el botón de suspensión puede identificarse en una máquina como
SLPB
y en otra como
SBTN
.
Para determinar cómo se reconocen sus botones o atajos
Fn
, ejecute la siguiente orden:
# journalctl -f
Ahora presione el botón de encendido y/o el botón de suspensión (por ejemplo,
Fn+Esc
) en su máquina. El resultado debería ser algo así:
logger: ACPI action undefined: PBTN
logger: ACPI action undefined: SBTN
Si eso no funciona, ejecute:
# acpi_listen
o con
openbsd-netcat
:
$ netcat -U /var/run/acpid.socket
Luego presione el botón de encendido y verá algo como esto:
button/power PBTN 00000000 00000b31
El resultado de
acpi_listen
se envía a
/etc/acpi/handler.sh
como parámetros $1, $2, $3 y $4.
Ejemplo:
$1 button/power
$2 PBTN
$3 00000000
$4 00000b31
Como habrá notado, el botón de suspensión en la salida del ejemplo se reconoce realmente como
SBTN
, en lugar de la etiqueta
SLPB
especificada en el archivo
/etc/acpi/handler.sh
predeterminado. Para que la función de suspensión funcione correctamente en esta máquina, debería reemplazar
SLPB)
por
SBTN)
.
Al utilizar esta información como base, puede personalizar fácilmente el archivo
/etc/acpi/handler.sh
para ejecutar una variedad de órdenes según el evento que se active. Véase la sección
#Consejos y trucos
a continuación para conocer otras órdenes usadas comúnmente.
Nota
Eventos como
button/power
,
button/lid
,
button/suspend
y
button/hibernate
son gestionados por
systemd-logind.service(8)
de forma predeterminada, véase
Power management (Español)#Eventos de ACPI
. Si se gestionan estos eventos con
acpid
, la gestión de estos eventos por
logind
debe desactivarse primero o inhibirse.
Configuración alternativa
De manera predeterminada, todos los eventos ACPI se pasan a través del script
/etc/acpi/handler.sh
. Esto se debe al conjunto de reglas descrito en
/etc/acpi/events/anything
:
# Pasar todos los eventos a nuestro script de un solo controlador
event=.*
action=/etc/acpi/handler.sh %e
Si bien esto funciona bien, algunos usuarios pueden preferir definir reglas y acciones de eventos en sus propios script independientes. El siguiente es un ejemplo de como usar un archivo de evento individual y el script de acción correspondiente:
Como superusuario, cree los siguientes archivos:
/etc/acpi/events/sleep-button
event=button sleep.*
action=/etc/acpi/actions/sleep-button.sh %e
/etc/acpi/actions/sleep-button.sh
#!/bin/sh
case "$3" in
    SLPB) echo -n mem >/sys/power/state ;;
    *)    logger "ACPI action undefined: $3" ;;
esac
Haga el script
ejecutable
y
recargue
acpid.service
para que acpid reconozca los cambios en estos archivos.
Al usar este método, es fácil crear cualquier cantidad de scripts de eventos/acciones individuales.
Consejos y trucos
Nota
Algunas de las acciones descritas aquí, como el control de brillo de la pantalla y la (des)activación Wi-Fi, pueden ser ya administradas directamente por el controlador. Debe consultar la documentación de los módulos del kernel correspondientes, cuando este sea el caso.
Eventos de ejemplo
Los siguientes son ejemplos de eventos que se pueden usar en el script
/etc/acpi/handler.sh
. Estos ejemplos se deben modificar para que se ajusten a su entorno específico, por ejemplo cambiando los nombres de las variables de evento interpretados por
acpi_listen
.
Para configurar el brillo de la pantalla del portátil cuando esté o no enchufado (es posible que sea necesario ajustar los números, véase
/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
Averigüe la identidad acpi de los botones de volumen (véase arriba) y sustitúyalos por los eventos acpi en los archivos a continuación.
/etc/acpi/events/vol-d
event=button/volumedown
action=amixer set Master 5-
/etc/acpi/events/vol-m
event=button/mute
action=amixer set Master toggle
/etc/acpi/events/vol-u
event=button/volumeup
action=amixer set Master 5+
Nota
Estas órdenes pueden no funcionar como se espera con PulseAudio.
[1]
Para una funcionalidad completa, ejecute las órdenes como el usuario actual mientras especifica la
variable de entorno
XDG_RUNTIME_DIR
, por ejemplo con:
# sudo -u
usuario
XDG_RUNTIME_DIR=/run/user/
1000
pactl
Sugerencia
Desactive o vincule los botones de volumen en Xorg para evitar conflictos con otras aplicaciones. Véase
Xmodmap
para más detalles.
Véase también
[2]
.
Activar el control del brillo
De forma similar al control de volumen, acpid también le permite controlar el brillo de la pantalla. Para lograr esto, escriba algún controlador, como este:
/etc/acpi/handlers/bl
#!/bin/sh
bl_dev=/sys/class/backlight/acpi_video0
step=1

case $1 in
  -) echo $(($(< $bl_dev/brightness) - $step)) >$bl_dev/brightness;;
  +) echo $(($(< $bl_dev/brightness) + $step)) >$bl_dev/brightness;;
esac
y nuevamente, conecte las teclas a los 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 +
Activar el control Wi-Fi
También puede crear un interruptor de alimentación de la red inalámbrica simple al presionar el botón WLAN. Un ejemplo de evento:
/etc/acpi/events/wlan
event=button/wlan
action=/etc/acpi/handlers/wlan
y su controlador:
/etc/acpi/handlers/wlan
#!/bin/sh
rf=/sys/class/rfkill/rfkill0

case $(< $rf/state) in
  0) echo 1 >$rf/state;;
  1) echo 0 >$rf/state;;
esac
Obtener el nombre de usuario de la pantalla actual
Para ejecutar órdenes que dependan de
Xorg
, es necesario definir la visualización X así como el archivo MIT Magic Cookie (a través de XAUTHORITY). Después es tener una credencial de seguridad que proporciona acceso de lectura y escritura al servidor X, a la pantalla y a cualquier dispositivo de entrada (Véase
xauth(1)
).
Véase
[3]
para una función de ejemplo cuando se usa
xinitrc
.
Nota
Si la luz de fondo de la pantalla LCD no se apaga cuando la tapa está cerrada, puede hacerlo manualmente ejecutando
getXuser xset dpms force off
y
getXuser xset dpms force on
en los eventos de tapa cerrada y abierta respectivamente. Si la pantalla está en blanco pero la luz de fondo encendida, en su lugar utilice
vbetool
con
betool dpms off
y
vbetool dpms on
. Véase también
Configuración de XScreenSaver
.
Cuando utilice
who
o
w
, asegúrese de que se cree
/run/utmp
en el momento del arranque. Véase
utmp(5)
para más detalles.
Conectar a un socket acpid
Además de los archivos de reglas, acpid acepta conexiones en un socket de dominio UNIX, de forma predeterminada
/var/run/acpid.socket
. Las aplicaciones de usuario pueden conectarse a este socket.
#!/bin/sh

acpi_listen | while read -r event; do
handler.sh
"$event"
done
Donde
handler.sh
puede ser una script similar a
/etc/acpi/handler.sh
.
Véase también
Página principal de acpid
Gentoo:ACPI#Configuration