ACPI
Mucha gente se hace la misma pregunta: cuando ejecuto halt, el sistema se queda mostrando el mensaje
Power Down, pero la máquina no se apaga automáticamente. ¿Hay alguna forma
de conseguir que mi ordenador se apague automáticamente al ejecutar un halt?.
La respuesta, por supuesto, es que sí. Existen varias formas de hacer esto (APM, ACPI...). En este
documento nos centraremos en ACPI.
¿Qué es ACPI?
Tal como podemos leer en la página de ACPI Specification,
las siglas ACPI hacen referencia a Advanced Configuration & Power Interface, y es una especificación
desarrollada por varias empresas como Compaq, Intel, Microsoft, Phoenix y
Toshiba.
Esta especificación define unos interfaces estádares dirigidos al sistema operativo para
la administración de energía en nuestros equipos. Es decir, es una abstracción de los
mecanismos hardware de administración de energía a ser usado por el sistema operativo.
Haciendo que nuestro sistema utilice ACPI
Tan solo necesitaremos dos pasos para habilitar el uso de ACPI. Lo primero será activar el soporte
ACPI en la BIOS de nuestro ordenador. Esto depende de cada fabricante, así que deberás
consultar la documentación de tu placa para saber como acceder a la BIOS de la misma. Puede darse
el caso de que nuestra BIOS no soporte ACPI. En ese caso poco podemos hacer :(. Deberemos buscar
métodos alternativos de administración de energía, como APM, por ejemplo.
El segundo paso requiere la recompilación de nuestro núcleo, para hacer
que nuestro sistema interactúe con el interfaz proporcionado por ACPI. Como siempre sucede en estos
casos, lo mejor que podemos hacer es acudir al Kernel
HOWTO, aunque se intentará dar aquí un resumen del proceso.
Primero acudimos a http://www.kernel.org, desde donde nos podremos
descargar la última versión estable del núcleo (a la hora de redactar este documento, dicha versión
era la 2.4.18). El archivo .tar.gz conteniendo las fuentes del núcleo deberá ser descomprimido
y desempaquetado en el directorio /usr/src/linux, por lo que si teníamos dicho directorio
ocupado, lo moveremos a cualquier lugar (por ejemplo, a /usr/src/linux-old) mediante el comando mv.
Trasladamos el archivo linux-2.4.18.tar.gz a /usr/src/, y lo descomprimimos de la siguiente forma:
tar -xvzf linux-2.4.18.tar.gz
Dentro de /usr/src/linux ejecutamos make menuconfig (o make xconfig si nos encontramos
en el entorno gráfico) y configuramos el núcleo según las características de
nuestro sistema. Un buen truco en este caso, si ya habíamos compilado un núcleo anteriormente
(de la misma serie, es decir, un núcleo 2.4.X), es copiar el archivo .config de las fuentes
de dicho nucleo al directorio /usr/src/linux y tras ello hacer el make menuconfig, por lo que
conservaremos nuestra configuración anterior. Si es la primera vez que compilamos el núcleo
siempre podemos hacer un make oldconfig.
En el caso concreto de ACPI, tras ejecutar make menuconfig, seleccionamos General Setup,
y dentro del menú que nos aparecerá seleccionamos (incluyendo en el núcleo, NO como
módulo) ACPI support, y ACPI Bus Manager así como todas las subopciones que
aparecen tras seleccionar esta última. Esta segunda característica nos permitirá
que el sistema interprete los eventos relacionados con ACPI por medio del demonio acpid, del que
hablamos más adelante.
Una vez hecho esto, una forma de compilar el núcleo es ejecutar lo siguiente:
make dep
make clean
make bzImage
make modules
make modules_install
Por último copiamos el nuevo kernel, normalmente situado para un procesador x86 en usr/src/linux/arch/i386/boot/bzImage,
al directorio /boot, y creamos una entrada en LILO o GRUB (según el gestor de arranque que utilicemos;
consultar la documentación para cada uno).
Y eso es todo. Para comprobar que el soporte para ACPI ya existe, tras arrancar con el nuevo núcleo,
ejecutamos halt y vemos si tras el mensaje de Power down la máquina se apaga
de forma automática.
El demonio acpid
Si solo nos limitamos a hacer lo anterior estaremos desaprovechando las funcionalidades que nos puede
ofrecer ACPI de manejar ciertos eventos. Por ejemplo, podríamos hacer que al pulsar el botón
de apagado de nuestra máquina, se ejecutase halt automáticamente, con lo que
no habría peligro de que alguien cerrara el sistema de forma incorrecta.
Este manejo de eventos se puede llevar a cabo utilizando el demonio acpid, cuyas fuentes
podemos obtener en http://acpid.sourceforge.net. Tal como
se indica en la página de este proyecto, necesitaremos parchear nuestro núcleo si éste
es anterior a la versión 2.4.10, pero si hemos instalado la última versión siguiendo las
indicaciones anteriores, nos podremos saltar este paso. La instalación se puede hacer de diversas maneras:
- Si utilizamos Debian, tan solo deberemos hacer un apt-get install acpid, para que este
paquete quede instalado y configurado.
- Si utilizamos Red Hat o alguna distribución que utilice el sistema de paquetes rpm,
nos descargamos desde la página del proyecto acpid el rpm correspondiente a la
última versión, y lo instalamos ejecutando rpm -Uvh acpid-version.rpm, donde
version será el número de versión así como la arquitectura
correspondientes.
- Por último, podemos hacer una instalación a partir de las fuentes. Descargamos
acpid-1.0.1.tar.gz (las fuentes de la última versión a la hora de redactar
este documento), lo copiamos a un directorio temporal, y lo descomprimimos con:
tar -xvzf acpid-1.0.1.tar.gz
Para compilarlo nos introducimos en el directorio acpid-1.0.1, tecleamos make, y nos introducimos
en el directorio Debian o RedHat (según nuestra distribución) y consultamos el
README correspondiente para ver como terminar de configurarlo para nuestro equipo.
Tras la instalación, acpid debería ser iniciado durante el arranque. Abrirá un fichero
de eventos (/proc/acpi/event por defecto) e intentará leer líneas de dicho fichero, correspondientes
a eventos. Cuando se reciba un evento,
se comprobará una serie de reglas y se ejecutará aquella que se corresponda con el
evento producido.
Las reglas estarán definidas en unos archivos de configuración, por defecto situados en
/etc/acpi/events/. Cada fichero deberá definir dos elementos, un evento y una
acción. Cualquier línea en blanco o línea que comience por # será ignorada.
Cada línea, a su vez, tiene tres elementos: un identificador, un símbolo de igual, y un valor.
El valor del evento será una expresión regular con la que se comparará el evento
leido de /proc. El valor de la acción será un comando, que será invocado
mediante /bin/sh cuando el evento correspondiente se produzca. Los carácteres especiales
de este comando serán preservados, excepto la cadena "%e", que será
reemplazada por el texto literal del evento para el cual la acción fue invocada. Por tanto, si deseamos
utilizar el símbolo %, deberemos escaparlo usando "%%".
Al instalar acpid se incluye un ejemplo, encargado de apagar nuestro sistema automáticamente
cuando se pulse el botón de apagado. Se incluye tanto el archivo de configuración /etc/acpi/events/powerbtn,
que relaciona el evento de pulsado del botón de encendido/apagado:
event=button[ /]power
action=/etc/acpi/powerbtn.sh
Como el propio script llamado cuando se pulsa el botón (/etc/acpi/powerbtn.sh):
/sbin/init 0
Para consultar los eventos que podemos capturar, podemos echarle un vistazo a la ayuda de las opciones
del menú de configuración del núcleo dependientes de General Setup->ACPI Support->ACPI Bus Manager
(recordemos que se accede a este menú ejecutando make menuconfig en /usr/src/linux). Por
ejemplo, si nuestro ordenador dispone de botón sleep, podrímos usar el evento button[ /]sleep,
o en el caso de portátiles, podriamos controlar el sobrecalentamiento con el evento thermal.
[VOLVER]