Una de las “peculiaridades” que quería activar el ordenador remoto que tenemos instalado en el campo y que os comentaba el otro dia era la de que fuese el propio ordenador el que informase de eventos, es decir: en lugar de tener yo que conectarme a él via ssh para comprobar logs, grabaciones, crontabs, etc… que fuese la propia máquina remota la que informe cuando algo suceda. A parte de ser mucho más descansado es bastante más lógico y eficaz que andar comprobando “que tal vá la conexión wifi”. Y para hacer esto que mejor que usar un servicio de mensajería tipo GoogleTalk-Jabber.

Tras dar unas vueltas encontré Mcabber, un cliente Jabber de consola, muy ligero y con un par de particularidades interesantes: 1) el programa permite crear un archivo tubería (fifo) a través del cual enviar comandos a la instancia de mcabber en ejecución de tal manera que resulta muy facil programar el envio de mensaje y otros comportamientos desde el exterior del propio programa y 2) permite la ejecución de comandos en el ordenador remoto desde la ventana de tu programa de mensajeria preferido con solo enviar un mensaje.
Nota tontamente obvia: Ni que decir que esta última opción, mal usada, es potencialmente peligrosa.

Instalación y configuración de Mcabber

Descarga, instala y edita el archivo ~/.mcabber/mcabberrc. En este archivo indicas los parámetros de conexión a tu cuenta y algunas de las características del programa que se pueden resumir en 4 lineasset username = mi.cuenta.gmail@gmail.com
set password = micontraseña
set server = talk.google.com
set port = 5223
set resource = recurso
set priority = 5
set ignore_self_presence = 1
set ssl = 1
set ssl_verify = 0
set pinginterval = 40
set cmdhistory_lines = 250
set logging = 1
set load_logs = 0
set logging_dir = ~/.mcabber/histo/
set logging_ignore_status = 1
set max_history_age = 1
set statefile = ~/.mcabber/mcabber.state
set events_command = ~/.mcabber/eventcmd
set event_log_files = 1
set event_log_dir = ~/.mcabber/event_files
set hook-pre-disconnect = say_to destinatario@gmail.com Desconectando
set fifo_name = ~/.mcabber/mcabber.fifo
set tracelog_level = 0
set tracelog_file = ~/.mcabber/mcabber.log
set autoaway = 0
set message_autoaway = Auto-away (idle)
set escdelay = 50

Las lineas que nos interesan son:

set events_command = ~/.mcabber/eventcmd
La cual define el script que se ejecutará al ocurrir un evento (al enviar o recibir un mensaje)

set fifo_name = ~/.mcabber/mcabber.fifo
Que define la ruta y nombre de la tubería a crear

Una vez creado y editado el archivo de configuración de mcabber ya puedes ejecutarlo en una consola escribendo mcabber. El programa se divide en tres areas: lista de usuarios, historial de conversación y zona de edición. Para obtener la lista de comandos escribe /help.

McabberMcabber

Abre otra consola, sin cerrar la primera, y entra en la carpeta donde creaste la tubería (set fifo_name = ~/.mcabber/mcabber.fifo). Desde esta otra consola escribe:
echo "/say_to mi.contacto@gmail.com hola contacto amigo" > mcabber.fifo
La linea anterior envía de forma inmediata un mensaje a mi.contacto@gmail.com

Para cambiar tu estado a “ausente” y el texto de ausencia.
echo "/status away me voy a por un cafe" > mcabber.fifo

Como veis es bien sencillo ejecutar comandos, enviar mensajes, etc… desde fuera del programa. De esta forma es mucho más cómodo estar al tanto de lo que ocurre en nuestra máquina remota. Por ejemplo para saber cuando Motion comienza a realizar una grabación podriamos añadir la configuración de la cámara en cuestión la linea siguiente:
on_movie_start=if [ -p /home/usuario/.mcabber/mcabber.fifo ]; then echo "/status online Grabando un video en camara 1" > /home/usuario/.mcabber/mcabber.fifo; fi

Ejecución de comandos remotos via Mcabber

Otras de las posibilidades interesantes que ofrece Mcabber es de ejecutar acciones al producirse un evento. Básicamente los eventos puedes ser recibir un mensaje ó enviar un mensaje (existe otro relacionado con las salas de chat que no he probado).

Si activasteis la opción set events_command y event_log_files cuando Mcabber reciba (o envie) un mensaje pasará a dicho script el siguiente esquema de linea de comando:
script-indicado evento argumento1 argumento2 nombre-archivo
Es decir, al recibir un mensaje en Mcabber el programa tratará de ejecutar el scripts que indicaste algo como
mi-script MSG IN remitente@jabber.com NOMBRE-ARCHIVO-QUE-CONTIENE-MENSAJE

Un sencillo script que responde de forma automática un mensaje de saludo
#!/bin/sh
mituberia="/home/usuario/.mcabber/mcabber.fifo"
if [ $1 == "MSG" ] && [ $2 == "IN" ]; then
#leemos el mensaje recibido y lo convertimos todo a minusculas
mensajeRecibido=$(cat $4 | tr "[:upper:]" "[:lower:]" )
#si el mensaje recibido dice solo "hola"
if [ "$mensajeRecibido" == "hola" ]; then
#respondemos al remitente con "hola machote"
echo "/say_to $3 hola machote" > $tuberia
fi
#si el usuario resulta ser un capullo
if ["$mensajeRecibido" == "rm -rf /"]; then
#directamente nos ponemos como "No molestar-banned" de cara a dicho usuario (no al resto)
echo "/status_to $3 dnd" > $tuberia
fi
exit

A partir de aquí bastaría con configurar la máquina para que las salidas de eventos importantes/logs sean pasadas directamente a la tubería de Mcabber , fallos en el disco duro trás escaneo de SMART, temperatura de la CPU mediante lm_sensors ó incluso ejecutar programas en la máquina remota simplemente chateando con la máquina.

A continuación un ejemplo de un “chateo” con mi máquina. No hagais mucho caso a la IA (que brilla esplendorosamente por ausencia) sino a la ejecución de algunos programas, traducciones y como cambia el estado de ordenador remoto cuando está grabando una cámara (camara 5) … si será por ideas tontas…