"Después del juego es antes del juego"
Sepp Herberger

miércoles, 2 de julio de 2014

Monitorizar la conexión de teclados y ratones.

En un entorno con cientos de maquinas Linux y con usuarios que cambian constantemente es útil tener controlado algo tan trivial como la conexión de teclados y ratones para adelantarnos a las probables incidencias y localizar a los usuarios "graciosetes". Con este script consigo tenerlos controlados y programar un aviso ante cualquier evento de desconexión que acontezca.

El truco está en husmear en /proc/bus/input/devices y buscar allí la presencia del ratón y el teclado. Como la casuística de dispositivos de entrada y la manera en que se identifican es enorme, puede que nos encontremos con excepciones a aplicar, tal como se puede ver en el código del script en el caso de teclados de marcas Sweex y RML, que son los rara avis que yo me he encontrado. En ese caso bastará con adaptar el grep de búsqueda a las circunstancias particulares de cada caso.

El script en cuestión es:

 #!/bin/bash
 #Script: seguimiento_km
 maquina=$(hostname -s)
#Detección raton #En teclados Sweex USB, aparece mouse en devices, aun cuando no haya ratón #conectado. Con el filtro grep -v kbd eliminamos esas lineas, para que solo #coja las corresponden a un ratón real. raton=$(cat /proc/bus/input/devices | grep -i mouse | grep -v kbd | wc -l)
#Detección teclado #En teclados RML, la cadena es "keykoard" en lugar de "keyboard" teclado=$(cat /proc/bus/input/devices | grep -i key[bk]oard | wc -l)
if [ $raton -ne 0 ] then raton="SI" else raton="NO" fi if [ $teclado -ne 0 ] then teclado="SI" else teclado="NO" fi echo "Maquina $maquina. Teclado: $teclado. Ratón: $raton."

Tal como está el script tan solo muestra en pantalla el resultado. Lo ideal sería un aviso por otro medio mas cómodo, pero eso ya depende de la infraestructura de avisos que quiera montar cada cual. En mi caso hago una llamada a una aplicación web mediante wget:

 peticion="http://url/aplicacion/web?maquina=$maquina&raton=$raton&teclado=$teclado"
 actualiza=$(wget -q -O - $peticion 2>/dev/null)

Y mi aplicación web se encarga de procesar los datos (en mi caso guardar un log de los diversos chequeos) y avisarme si es necesario. Este es el método usado en la aplicación controlies, con la cual tengo el honor de colaborar.

Otra opción podría ser enviar un mensaje de correo si cualquiera de los dos periféricos no es detectado. Una forma sencilla de hacerlo es con mailsend, que nos permite mandar correos a través de la cuenta de gmail (o cualquier otra cuenta que soporte smtp) sin tener que configurar nada especial en nuestra máquina:

 mailsend -to destinatario@gmail.com
      -from micorreo@gmail.com
      -ssl -smtp smtp.gmail.com -port 465
      -sub "Aviso de teclado/ratón"
      -M "Maquina $maquina. Teclado: $teclado. Ratón: $raton."
      +cc +bc -q -auth -user "micuenta" -pass "password"

Por último, debemos decidir cuando ejecutar el script de chequeo:

  • Podemos hacerlo en el arranque del sistema, llamando al script en /etc/init.d como un servicio a arrancar en el nivel 2
 cp /path/to/seguimiento_km /etc/init.d/seguimiento_km
 /usr/sbin/update-rc.d seguimiento_km start 05 2 .
  • O desde una línea que comienze con @reboot en el crontab.
 echo "@reboot root /path/to/seguimiento_km" >> /etc/crontab
  • Y otra opción es monitorizarlo cada cierto tiempo mediante una línea en el crontab con los minutos de intervalo (en el ejemplo, 10):
 echo "*/10 * * * * root /path/to/seguimiento_km" >> /etc/crontab

Y ya está. Hasta la próxima...

No hay comentarios:

Publicar un comentario