| Inicio | Informática | Galería | Libro de visitas | Mi mundo | Sobre mí |
En este artículo explicaré como poner a dormir "la siesta" un portátil para gastar menos energía cuando no lo estemos utilizando. Como mucha gente sabrá, en GNU/Linux existe el sistema de gestión de energía ACPI (Advanced Configuration and Power Interface); aunque sólo en máquinas i386, ya que cada arquitectura tiene su sistema de administración de energía (ej: APM o PMU).
En el subsistema ACPI, vienen tres modos de ahorro de energía para utilizar:
Cada uno de estos estados tienen otros nombres más utilizados, como:
Cuando el computador se suspende, guarda el estado de los procesos y del kernel en memoria e intenta apagar todos los dispositivos para consumir muy poco. A diferencia del "Suspend to Disk", que mete el estado del kernel y procesos en una partición (o archivo) swap del disco duro y apaga la computadora. Pero, ¿qué diferencia hay entre S1 y S3?
Lo normal es usar el S3, ya que todo se guarda en memoria, se apagan todos los dispositivos excepto la RAM, y en cuanto se quiere despertar simplemente se reactivan los dispositivos y listo. En Linux, el sistema ACPI y, en concreto, el ACPI Sleep States, es algo todavía experimental y puede no funcionar perfectamente en algunos equipos. En mi portátil, en concreto, viene una tarjeta gráfica ATI Mobility Radeon 9700 que me dio muchos problemas con el *sleep*. Mi portátil entra en suspensión perfectamente pero al despertar no reactiva el display ni el teclado, con lo cual tengo que desconectar la corriente y arrancar de nuevo.
Ayer estaba aburrido y se me ocurrió probar el modo *standby*. Realmente, el modo standby no está nada mal:
Ahora, gracias a eso y el sistema de scripts en /etc/acpi, disfruto de un modo *siesta* que me ahorra mucha energía cuando no tengo que utilizar el portátil. A continuación os explico cómo lo conseguí por si a alguien no le funcionase el modo S3.
Lo primero de todo, en GNU/Linux, y como siempre, es configurar nuestro kernel para darle soporte. También como siempre, recomiendo utilizar un kernel 2.6 (yo uso 2.6.15) y montar sysfs en /sys, para poder acceder al ACPI fácilmente. Para ello, si Linux no lo monta ya automáticamente que será lo más seguro, basta con hacer:
Ahora ya sólo faltará activar dos opciones en el kernel:
Una vez hecho esto, recompilamos como siempre y reiniciamos. Pasemos a la siguiente sección.
Para poder luego automatizar nuestro ordenador, por ejemplo, como yo lo tengo, que se duerme al cerrar la tapa y luego se despierta con el botón de encendido, necesitaremos el paquete acpid, y si queremos añadir otra herramienta que nunca viene mal, instalamos también el paquete acpi. De este modo, en Debian:
Ya tenemos los programas necesarios, ahora vayamos a probar nuestro modo *standby*.
Antes de ninguna automatización, debéis estar seguros de que vuestro sistema soporta S3 o S1, y si podéis, utilizad siempre S3 porque ahorra un poco más energía.
Para probar el modo *suspend*, cerrad las sesiones de X y en una consola, como root, haced:
Tras esto, para despertar el sistema, tendréis que apretar el botón de encendido/apagado, si el sistema se despierta y seguramente se apaga, es que todo funciona bien. Ahora arrancad el sistema y probad lo mismo pero para el modo S3 (Suspend to RAM):
Para despertar basta con pulsar cualquier tecla. Si todo va bien, el sistema encenderá el display y podremos seguir funcionando normalmente; si no, significa que algo anda mal. De todos modos, el S3 es complicado, con lo que os recomiendo leer un documento fundamental que está en /usr/src/linux/Documentation/power/states.txt.
Tanto si os funciona el modo *sleep* como si sólo os funciona el modo *standby*, ahora supongo que os gustará configurar los scripts y automatizar un poco la cosa ¿no?, pues vamos allá..
Cuando un evento ACPI ocurre, es procesado un archivo dentro de /etc/acpi/events/. Por ejemplo, cuando se pulsa el botón de encendido/apagado es procesado el archivo /etc/acpi/events/powerbtn, y dentro, habrá una indicación de ejecutar un script, que normalmente suele ser /etc/acpi/powerbtn.sh. Si se cierra o abre la tapa, será procesado cualquier archivo en /etc/acpi/events/*lid. Por eso, yo me creé mi propio archivo my_lid con este contenido:
Con esta indicación, cuando cerremos o abramos la tapa del portátil, el demonio acpid leerá my_lid y ejecutará el script /etc/acpi/actions/my_lid.sh. Aquí os pongo el contenido de dicho script:
Lo de /tmp/susp_lock/ es porque en el script powerbtn.sh mira si se ha pulsado para despertar o si ya estaba despierto el sistema. Si existe el /tmp/susp_lock es que sólo necesitamos despertar, si no, es que ya estaba despierto y tenemos que apagar el sistema. Así no pierdo ninguna funcionalidad. Este es el contenido de /etc/acpi/powerbtn.sh:
Tras esto, sólo cabe decir que vosotros podéis añadir vuestras propias líneas a los scripts y configurarlo de otro modo. Por ejemplo, lo próximo que voy a hacer es chequear si el portátil está funcionando con batería, y si no, no activaré el modo suspensión automáticamente ;-).
He leído que algunas tarjetas ATI que usan el driver fglrx tienen una BIOS un tanto complicada. La única manera de resetearla para que despierten del modo sleep es estando en el servidor X (debido a que éste es el único capaz de enviar la interrupción apropiada), pero nunca es posible desde consola. De modo que ahora ya es posible utilizar el sleep mode S3, siempre y cuando se use desde las X.
Como nota adicional, yo utilizo un kernel 2.6.15, el driver Intel AGPGART y los drivers fglrx 8.20.8-1.1 en Debian Sid. Eso es todo, espero que os funcione, si no S3 pues S1. Si tenéis algún problema o duda, mandadme un e-mail. Un saludo :-)