Programar el encendido del ordenador
Es muy habitual programar el apagado del ordenador, pero la operación contraria, que es encender el ordenador, no se usa tanto, aunque muchas veces es tan útil como la primera para poder automatizar procesos y no consumir electricidad cuando no sea necesario.
Para hacerlo, nos ayudaremos de la RTC Alarm (Real-Time Clock Alarm) de la BIOS o UEFI, que permite programar el encendido del ordenador.
Podemos configurar la Real-Time Clock Alarm entrando en la BIOS de la placa del ordenador o hacerlo a través del sistema. Es más cómodo y más configurable hacerlo a través de la shell, ya que nos permite indicarle el momento exacto del próximo encendido.
Sin embargo, a través de la BIOS sólo nos deja dos opciones, que son programar un encendido, el siguiente, o programar el encendido todos los días a una determinada hora.
Otra ventaja de programar a través de la consola el siguiente encendido es que nos permite trabajar en tiempo real con más datos y, con ellos, calcular la fecha concreta de encendido con date. Para calcular el encendido, hay que tener en cuenta que como vamos a trabajar desde la consola con la BIOS de la placa, puede darse el caso de que no coincida la hora de la BIOS con la hora del sistema. También debemos ser cuidadosos con el formato de la fecha, usando mejor el formato de segundos transcurridos desde el uno de enero de 1970.
Por lo tanto, trabajaremos con date +%s
para tener el momento actual en formato de segundos transcurridos desde el 1 de enero de 1970. Y, a partir de ese dato, añadirle segundos, minutos, horas… para el encendido. O, si queremos encender el equipo un día a una hora, también lo calcularemos con ese formato.
Supongamos que queremos usar como fecha de encendido el 3 de mayo de 2080 a las 19:00. Calcularemos el timestamp con:
date +%s -d "2080-05-03 19:00"
Si queremos el timestamp de dentro de 8 horas:
date +%s -d "+ 8 hours"
Y el de dentro de 30 minutos:
date +%s -d "+ 30 minutes"
Una vez que sabemos el momento del encendido, se lo indicaremos al Real-Time Clock Alarm a través del fichero /sys/class/rtc/rtc0/wakealarm
Pero no nos valdrá sólo con hacer un echo convencional:
$ sudo echo "date +%s -d '+ 8 hours'" > /sys/class/rtc/rtc0/wakealarm bash: /sys/class/rtc/rtc0/wakealarm: Permiso denegado
Tenemos que ejecutar una shell, por ejemplo, sh e indicarle que, en lugar de la entrada estándar, lea de una cadena de texto. Lo haremos con sh -c
Así pues, la instrucción completa, si queremos que se encienda el ordenador dentro de ocho horas será:
sudo sh -c "echo `date '+%s' -d '+ 8 hours'` > /sys/class/rtc/rtc0/wakealarm"
Huelga decir, que si queremos otro momento, cambiaremos el '+ 8 hours'
por el momento a apagar.