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

Mostrando entradas con la etiqueta popup. Mostrar todas las entradas
Mostrando entradas con la etiqueta popup. Mostrar todas las entradas

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.

sábado, 29 de septiembre de 2018

Mensaje pop-up en escritorio de usuario desde conexión ssh.

Un compañero planteaba el problema de como enviar un mensaje al usuario que tenia abierta una sesión gráfica en el escritorio de la máquina desde una conexión ssh del usuario root. Un escenario típico sería estar haciendo alguna tarea de mantenimiento en remoto y comunicar algo de interés al usuario de la máquina a la que estamos conectados, tipo "ya está instalado el programa" o "no apague la máquina al acabar, por favor".

Para conseguir esto el código a teclear después de entrar por ssh sería:
export XAUTHORITY=/var/run/lightdm/root/:0
mensaje="El programa ya esta instalado, puede probar"
zenity --warning --width=200 --no-wrap --text="$mensaje" --display=:0
Lo importante aquí es asignar a XAUTHORITY la sesión del usuario que está usando el escritorio, ya que por muy root que seamos no podemos enviar el mensaje mostrado por "zenity" a su escritorio sin tener permisos para ello.

En este código hay varias asunciones: que el usuario está en la sesión gráfica :0 (eso se sabe haciendo un "who" antes) y que su fichero XAUTHORITY es /var/run/lightdm/root/:0. Esto último lo sabemos haciendo:
# ps aux | grep X
root       517  2.1  1.0 293236 41432 tty7     Ssl+ 16:28   2:15 /usr/lib/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
.....
Estos parámetros serán así de forma general para todas las máquinas de nuestros centros (basadas en una imagen similar de Xubuntu) pero habría que tener cuidado con los valores del display o el xauthority otros casos, como una configuración multiseat o con thinclients.

Me despido con una foto de la Opportunity reaparecida después de la mega-tormenta de arena que ha azotado Marte en los últimos meses:


De momento está mohína y no responde, a ver si con un poco de suerte se cargan las baterías y puede hacer un rearranque del sistema, despertando una vez más victoriosa y con ganas de explorar. Que maravilla, preparada para funcionar 90 soles (días marcianos) lleva mandando datos 14 años. Sin ningún genero de duda está hecha por los mismos técnicos que diseñaron los Fujitsu P300 que tenemos como thinclients en las aulas.