Busindre » Blog Archive » Apagado seguro mediante el “Botón de encendido” en Slackware 12.0

Apagado seguro mediante el “Botón de encendido” en Slackware 12.0

January 17th, 2008 by Busindre

Vamos a ver como poder usar el botón de apagado de nuestra CPU para que al ser pulsado, nuestro Slackware haga lo que considere oportuno, que por defecto es realizar un apagado de forma segura. De no usarlo de esta forma, cada vez que apretemos el botón de apagado nuestra CPU o no hará nada o se apagará mediante falta de corriente, lo cual nunca es muy recomendable como es lógico. Esto lo haremos a traves de ACPI

Como ya sabemos y explicado de forma muy resumida, acpi simplemente es un demonio que se encarga de administrar la energía de nuestro sistema, tiene especial interés en portátiles donde el manejo de energía es más complejo y necesario. El demonio Acpid, tiene un fichero de configuración (/etc/acpi/events/default) donde tiene programadas las acciones a realizar dependiendo de los eventos que suceden en el equipo. En SlackWare viene poco configurado, como en la mayoría de diestros de GNU/Linux, por defecto solo tenemos estas lineas que nos puedan interesar en el fichero de configuración "default".

XML:
#event=button power.*
#action=/sbin/init 0

# Optionally you can specify the placeholder %e. It will pass
# through the whole kernel event message to the program you've
# specified.

event=.*
action=/etc/acpi/acpi_handler.sh %e

NOTA: La cadena "%e", al invocarse el comando, será reemplazada por el texto literal del evento para el cual la acción fue invocada. Se le pasa evento como un parámetro al script.

Por defecto, se produzca el evento que se produzca siempre ejecutara el script /etc/acpi/acpi_handler.sh (En el caso de SlackWare) pasándole como parámetro el evento (%e). Las opciones comentadas podríamos descomentarlas, pero realmente el evento button power que proponen ya esta tratado en /etc/acpi/acpi_handler.sh, por lo que no es necesario descomentarlas. Veamos que hace el script acpi_handler.sh :

XML:
#!/bin/sh
# Default acpi script that takes an entry for all actions

IFS=${IFS}/
set $@

case "$1" in
  button)
    case "$2" in
      power) /sbin/init 0
         ;;
      *) logger "ACPI action $2 is not defined"
         ;;
    esac
    ;;
  *)
    logger "ACPI group $1 / action $2 is not defined"
    ;;
esac

Como vemos al pasarle el evento "button", que es el producido al pulsa el botón de encendido / apagado de nuestra CPU, nuestro GNU/Linux procederá con el comando "/sbin/init 0", el cual apaga de forma controlada y segura el equipo. Para comprobar si tenemos disponible ese evento "button" en el sistema debemos ejecutar este comando:

$ dmesg | grep 'ACPI: Power Button'
ACPI: Power Button (FF) [PWRF]
ACPI: Power Button (CM) [PWRB]

De no tener una salida de este tipo, puede ser que no tengamos el kernel correctamente configurado o que bien no esta el modulo cargado en memoria (Como es el caso del kernel por defecto de Slackware 12.0), para ello ejecutamos este comando:

# modprobe button

Después de esto veremos que la salida del comando dmesg nos muestra el soporte del kernel para dicho evento y podrá ser usado, ahora al pulsar el botón de encendido se nos apagará la máquina de forma controlada. Conociendo como funciona, podemos editar el script a nuestro gusto para que nos avise mediante un email si alguien pulso el botón, para que deje un log de lo que queramos o para cualquier cosa que se nos ocurra. En este ejemplo sencillo vamos a hacer que antes de apagar se cree en un log de "apagados por botón" con la fecha en /var/log/apagado_boton, el cual fue creado anteriormente por nosotros.

XML:
#!/bin/sh
# Default acpi script that takes an entry for all actions

IFS=${IFS}/
set $@

case "$1" in
  button)
    case "$2" in
      power) echo "Apagado `date`"> /var/log/apagado_boton && /sbin/init 0
         ;
;
      *) logger "ACPI action $2 is not defined"
         ;;
    esac
    ;;
  *)
    logger "ACPI group $1 / action $2 is not defined"
    ;;
esac

Posted in How To |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.