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

jueves, 13 de mayo de 2021

Envio de mensajes mediante ventana emergente al escritorio del usuario

Este asunto acerca de mostrar un mensaje en el escritorio desde una sesión de consola o ssh ya lo vimos en otra ocasión, pero he tenido que darle una vuelta más en los últimos tiempos por una petición de un profesor. Vamos a revisitarlo usando este script más afinado:
# cat /usr/bin/mensaje-escritorio.sh 
#!/bin/bash

if [ $# -ne 1 ] 
then
    echo "Uso de parámetros incorrectos"
    echo "           $0 'Internet será cortado a las 12.30 durante  media hora\'"
    echo "           Formato de mensaje en Pango Markup Language"
    exit 1
fi

fecha=$(date "+%H:%M. %d-%m-%Y")
mensaje="\n\n\nAtención:  \n\n$1."
DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/\:0 zenity --display=:0 --info --text="$mensaje" --title="Aviso ${fecha}" --width="800" --height="600" --ok-label="OK"
exit 0
Básicamente, desde consola o desde una conexión ssh mostramos en el escritorio gráfico un mensaje, que se pasa como parámetro y que ocupará la mayor parte de la pantalla. Si no hay sesión abierta el mensaje se mostrara en la pantalla de inicio de sesión. Por ejemplo:
 # mensaje-escritorio.sh "Por favor, cierre la sesión ya que se va a reiniciar el servidor dentro de los próximos <span foreground='red'><b>5 minutos</b></span>"
Se mostrará:

Como podemos observar, el mensaje puede tener formato (negrita, tamaños, colores,...) usando el Pango Markup Language, un lenguaje de marcado sencillo que permite dar formato a textos al mostrarlos en pantalla.

Ahora bien, ¿que pasa si queremos enviar el mensaje a varias máquinas a la vez?. Pues sería con este script:
# cat /usr/bin/multi-mensajes.sh 
#!/bin/bash
#Parametros
# $1=mensaje
# $2=lista maquinas

if [ $# -ne 2 ] 
then
    echo "Número incorrecto de parámetros"
    echo "           $0 \"Atencion, cierren sesión\" \"spro-o01 a02-pro a04-pro\""
    echo "           Formato de mensaje en Pango Markup Language"
    exit 1
fi
clave="password1234" 
for maquina in $2
do
  sshpass -p${clave} ssh -o StrictHostKeyChecking=no root@$maquina "/usr/bin/mensaje-escritorio.sh \"$1\" > /dev/null 2>&1 " &
done

exit 0
Por ejemplo, para mostrar un mensaje en el escritorio de 4 máquinas:
 # multi-mensajes.sh "Por favor, cierre la sesión ya que se va a reiniciar el servidor dentro de los próximos <span foreground='red'><b>5 minutos</b></span>" "spro-o01 spro-o02 a02-pro a05-pro"
Si lo hacemos muy a menudo podría ser interesante usar el comando dsh en lugar de hacer llamadas ssh individuales. Incluso podemos valorar establecer relaciones de confianza SSH para evitar tener que indicar la clave de root en cada llamada.

Bien, pues con esto tenemos una herramienta para mandar mensajes emergentes remotos desde una máquina a cualquier otra máquina del centro.

No hay comentarios:

Publicar un comentario