[Tip] Eventos ACPI y scripts

Lo más seguro es que conozcais el sistema ACPI (Advanced Configuration and Power Interface). Entre otras muchas cosas, el ACPI se encarga de gestionar eventos relacionados con el control del sistema: inicio/apagado, temperatura, etc.

Para mi lo principal que aporta es conocimiento al sistema operativo de lo que pasa en su “cuerpo” (chasis/placa base/micro).

GNU/Linux tiene soporte de ACPI desde hace años y para determinados eventos tiene asociado un script a ejecutar. En Ubuntu, estos scripts se encuentran en el directorio /etc/acpi. El “mapeo” de eventos a scripts se realiza en el directorio /etc/acpi/events.

El caso más popular (o cuyo comportamiento másse modifica) es el evento asociado al botón de power.  En Ubuntu, el script que se ejecuta cuando el usuario presiona el botón físico de “power” se llama “powerbtn.sh”. Principalmente el cometido que tiene es invocar a shutdown para iniciar un apagado ordenado. Si por ejemplo queremos recibir una notificación en nuestro email de una máquina que se ha mandado apagar, podemos usar el envio de correo en Python incluyéndolo en el script antes mandar apagar la máquina. Otro uso puede ser simplemente ignorar el apagado (aunque si mantienes presionada la tecla,¿sabes qué pasa, no?)

En resumidas cuentas, está bien saber que el sistema operativo pueda realizar acciones ante un cambio gracias al sistema ACPI.

Translate to:English
MenefanteMenéame TwitterTwitter

Twitter trends desde la shell

Twiter Trend desde Bash

Twiter Trend desde Bash

Se acabaron las vacaciones. El primer post de este año trata sobre un script que hice estas navidades.

La shell de GNU/Linux es muy potente. Hace tiempo vi una opción de la shell bash (por defecto en casi todas las distribuciones) que permite hacer conexiones TCP/IP de una forma sencilla y elegante.

Para demostrar su uso he decidido hacer un pequeño script bash que vaya mostrando el Top-Ten de las tendencias en Twitter. Una tendencia (trend) es una palabra que se usa masivamente en los tweets de todo el mundo. En fin de año, el hashtag #HappyNewYear fue un trend.

El script lo he desarrollado sobre la shell bash de Ubuntu. Por motivos de seguridad, la gente de Canonical deshabilita la opción de conexiones TCP/IP para bash, así que es necesario recompilar bash sin dicha restricción.

  1. Obtenemos el fuente:
    
    apt-get source bash
    cd bash-3.2/
    
    
  2. Editamos el archivo debian/rules y eliminamos la línea “--disable-net-redirections \
  3. Generamos el paquete:
            dkpg-buildpackage -rfakeroot
            

    Es posible que necesites instalar algunos paquetes necesarios para la generación. En mi caso fue sharutils.

  4. Instalamos nuestra “nueva” bash.
    sudo apt-get install ../bash-3.2*deb
    

Este es el código del script:


#!/bin/bash

GREEN='\e[0;32m'
BLUE='\e[0;34m'
RED='\e[0;31m'

NONE='\e[0m'

while [ 1 ]; do

exec 3<>/dev/tcp/search.twitter.com/80
echo -e "GET /trends/current.json\n\n" >&3
text=`cat <&3`

clear
echo -e $GREEN "Twitter current trends\n\n" $NONE
ind=1
while [ 1 ]; do
       textp=${text#*\"name\":\"}
       if [ "$textp" = "$text" ]; then
	       break
       else
           text="$textp"
       fi

       end=`expr index "$text" \"`
       trend=${text:0:(($end-1))}
       text=${text:$end}
       echo -e $ind. $BLUE $trend $NONE
       let ind++

done
sleep 10
echo -e $RED "\nupdating..." $NONE
done

Voy a explicar un poco el código (al pasar el salto)

Leer más de esta entrada