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

martes, 19 de noviembre de 2019

Avisos multicanal desde monit.

Aunque ya he usado monit para avisar de determinados eventos, hay veces que necesito una notificación inmediata. En concreto quería monitorizar punto wifi que sospechosamente perdía la conexión más de lo habitual.

Para ello decidí no limitarme a mandar un "alert" cuando se pierde el ping, sino que lanzo un script que hará más ruido:
check host punto-wifi with address 192.168.0.1
       if failed icmp type echo count 3 with timeout 5 seconds then exec "/usr/local/bin/aviso-wifi"
1. Avisos multicanal.

El script aviso-wifi usa distintos tipos de aviso por diferentes cauces:
# cat /usr/local/bin/aviso-wifi 
#!/bin/bash

MENSAJE="Otra vez desconectado $(date)!"

#Log del sistema
echo $MENSAJE >> /var/log/wifilog.log

#Correo
mailsend -to destinatario@gmail.com \
      -from emisor@gmail.com \
      -ssl -smtp smtp.gmail.com -port 465 \
      -sub "Aviso" \
      -M "$MENSAJE" \
      +cc +bc -q -auth -user "emisor@gmail.com" -pass "mipassword"

#Mensaje push al móvil android
PUSHKEY="APcdkK"
curl --data "key=$PUSHKEY&title=Aviso&msg=$MENSAJE" https://api.simplepush.io/send

#Mensaje SMS al móvil android
MOVIL="+34855123456"

curl -X POST https://textbelt.com/text \
       --data-urlencode phone="$MOVIL" \
       --data-urlencode message="$MENSAJE" \
       -d key=textbelt

exit 0
Los distintos métodos usados son:
  • Guarda un registro en /var/log/wifilog.log.
  • Envía un correo mediante gmail usando mailsend, que tendríamos que instalar previamente.
  • Envía un mensaje push a nuestro móvil mediante la aplicación simplepush.io, que saltará de forma inmediata. Es tan sencillo como instalar esta aplicación en el móvil y poner en el script la PUSHKEY que nos aparece al abrirla, que identifica nuestro móvil de forma única como destinatario.
    Como pequeño inconveniente tenemos que los mensajes son gratuitos los 7 primeros días, luego hay que comprar la aplicación (cuesta unos merkels) para poder recibir mensajes. Se pueden establecer alarmas sonoras distintas en función de diversos tipos de mensajes push.
  • Por último, por volver a los 90, mandamos un SMS a nuestro móvil (+34855123456, es un número ficticio, pon el tuyo empezando por +34). Este servicio de textbelt permte mandar un único SMS al día gratis, pero si nos resulta útil podemos comprar paquetes SMS prepago.

Tanto simplepush.io como textbelt son dos de los muchos servicios push y SMS que hay. Yo he puesto estos porque los encontré pronto y me resultaron fáciles de usar mediante sencillas peticiones web con el comando curl.

Por supuesto, se podría ampliar el script con otros medios de aviso, por ejemplo mensajes telegram o cualquier otro sistema que se pueda hacer mediante scripts.

2. Avisos sonoros.

Un escalón mas es hacer sonar un aviso por los altavoces del PC del aula donde se detecta el evento, para que si es especialmente grave el usuario tome medidas. El script sería:
# cat /usr/local/bin/aviso-audio 
#!/bin/bash

#Subimos el volumen al máximo en el alsamixer
amixer set Master unmute
amixer set Master 100%

#Si hay un usuario logado, conectamos con su pulseaudio para subir el volumen al máximo
user=$(who | grep "(:0)" | head -1 | cut -f1 -d" "); 
if  [ -n "$user" ]
then
  su $user -c "DISPLAY=:0 pactl set-sink-volume 0 150%"
  su $user -c "DISPLAY=:0 pactl set-sink-mute 0 0"
fi

#Si esta instalado placasiatic es una siatic y podemos encender por comando la barra de sonido.
test -f /usr/sbin/placasiatic && placasiatic sonido up

if  [ -n "$user" ]
then
  while true
  do
     ffplay /root/scripts/locucion.mp3 -nodisp -nostats -hide_banner 
     su $user -c "DISPLAY=:0 zenity --info  --width 400 --height 100  --title='Desconexion de sistema' --text='Avise al administrador informatico de forma urgente.'"
  done
else
   ffplay /root/scripts/locucion.mp3 -nodisp -nostats -hide_banner -loop 0
fi


exit 0
Comentamos:
  • Con amixer quitamos el mute (silencio) y subimos al 100% del volumen del canal de audio Master.
  • Si hay un usuario con sesión iniciada, conectamos con su instancia pulseaudio para subir al máximo el volumen allí mediante pactl y hacer unmute.
  • Si estamos en una Siatic encendemos la barra de sonido mediante el relé. Esto garantiza que si el usuario ha apagado la barra la encendemos de nuevo usando la utilidad placasiatic. Por supuesto, si los altavoces del PC son convencionales y están apagados físicamente en su interruptor, no saldrá nada de sonido. Es algo que puede pasar y para lo cual no tenemos solución.
  • Por último, se reproduce una locución en bucle infinito codificado en mp3 mediante ffplay. Si hay usuario con sesión iniciada se muestra además un mensaje de texto en su escritorio mediante zenity.
  • La locución se puede generar fácilmente con texttomp3.
Para ejecutar este script desde el del apartado anterior es suficiente con añadir:
nohup /usr/local/bin/aviso-audio >/dev/null 2>&1 &


Cuando lo extraordinario empieza a ser habitual es señal de que se está haciendo bien: SpaceX ha lanzado una nueva carga de satélites Starlink.


Se lanzan 60 microsatélites Starlink (que mientras se van desplegando en las próximas semanas se podrán ver como un tren por el cielo nocturno una vez más), la etapa inicial del Falcon reutilizado por cuarta vez aterriza en la plataforma barcaza Of Course I Still Love You y la cofia se reutiliza por primera vez y se recupera mediante un barco.

Y todavía hay gente que afirma que todo lo relacionado con Elon Musk es humo.

viernes, 15 de noviembre de 2019

Teamviewer en Manjaro Linux

Como cualquier informático me toca muchas veces dar soporte a familiares, amigos y arrimados usando teamviewer. Cuando tienes Ubuntu o Fedora están en la página de descarga los paquetes preparados para descargar e instalar, pero cuando trabajamos con otra distribución con sistema de paquetes propio no nos queda otra que bajar el fichero .tar.xz con el ejecutable y los ficheros necesarios, descomprimirlo a mano y ejecutarlo.

Exite un paquete AUR de teamviewer para Manjaro, pero la verdad es que la versión original se actualiza tanto que el paquete no va muy fino y muchas veces no funciona. Es mejor descargar el tar.xz y trabajar directamente con él.

Un problema frecuente es que al abrir el programa se nos queda en estado de "error de conexión" y no funciona. Suponiendo que tengamos red y que no haya problema en los servidores de Teamviewer la razón típica es la versión del programa que tenemos instalado. A día de hoy solo Teamviewer 14 me funciona en el Manjaro, las versiones anteriores no conectan. Desconozco si es algo propio de Manjaro o afecta a otras implementaciones.

El segundo problema que me pasa es que cuando lanzamos el ejecutable de teamviewer:
$ cd teamviewer
$ ./teamviewer
Init...
CheckCPU: SSE2 support: yes
Checking setup...
Launching TeamViewer ...
Starting network process (no daemon)
Network process started (3703)
Launching TeamViewer GUI ...
Y ahí se queda sin mostrar nada.

El motivo real es que faltan por instalar dependencias, pero resulta que el ejecutable es tan mudito que no da error ninguno. Esto me recuerda un programa de Indra que vi una vez cuyo código tenia:
Sub XXXX(....)
   Try
      ...
      ...
   Catch 
   End Try
End Sub
en todos los métodos. Nunca daba un error.

Bueno, pues investigando el paquete AUR de teamviewer se pueden ver las dependencias necesarias, que son:
qt5-webkit
qt5-quickcontrols
hicolor-icon-theme
qt5-x11extras
Si instalamos esos paquetes con pacman la cosa funciona sin problema.



El cometa interestelar 2I/Borisov. El segundo objeto extrasolar detectado en la historia, detectado el 30 de agosto de 2019 por el astrónomo aficionado Borisov en Crimea (Rusia, diga lo que diga Ucrania) con un telescopio modesto. Dado el aviso, la comunidad de aficionados se volcó en hacer seguimiento del objeto y determinar su órbita en los días siguientes, resultando que era un cuerpo que venía de fuera del Sistema Solar e iba a irse de nuestro lado. Ciencia ciudadana se llama.

La última noticia es una foto del Hubble y se ha confirmado que es un cometa que trae agua de otro sistema solar.


Teniendo en cuenta que 1I/ʻOumuamua se descubrió 2 años antes está claro que esos visitantes de fuera son mucho mas frecuentes de lo que podríamos pensar. Sería maravilloso ver llegar otro con tiempo para mandar una sonda...

Transferencia rápida de ficheros del móvil android al PC.

Vaya, vaya, que meses mas ocupados entre inicios de curso y repetición de elecciones. A ver si aprendéis a votar bien de una vez y podemos avanzar.

Vamos a contar alguna cosita. Después del verano los móviles vienen petados de fotos y vídeos y cuando toca hacer limpieza y descargar unos cientos o miles de fotos siempre me pasa lo mismo. Si pincho el móvil con el cable USB e intento copiarlas a golpe de ratón resulta que se hace a paso de, tortuga, con mucha posibilidad de que se quede parado o aborte en algún punto.

Esto antes no era así pero en algún momento alguien ha decidido que la conexión USB del móvil no se haga como si fuera un pendrive, sino que use un protocolo MTP que por su (mala) implementación penaliza enormemente la transferencia de muchos archivos. Es el problema de añadir capas a las capas, que al final cada byte recorre tantos escalones que el proceso se eterniza. Una vez vi un programa hecho por Indra que mandaba datos en formato XML mediante SOAP, el cual transforma lo que envía a formato XML. Meter un XML dentro de un XML, que buena idea.

¿Tiene esto solución? Claro, usando la línea de comandos. Para ello necesitamos:

  1. Habilitar la depuración USB en el móvil.
  2. Windows: instalar los drivers y programas para el ADB.
  3. Linux: instalar los paquetes ADB.
  4. Repasar cómo funciona la conexión ADB y sus comandos.

Una vez hecho esto, tenemos que conectar el móvil con el cable USB al PC y ejecutar:
# adb shell
para conectar a una shell dentro del móvil. Una vez allí, mediante los comandos "cd" y "ls" exploramos las diferentes carpetas para dar con la ruta donde están los ficheros multimedia que queremos transferir. Esto puede cambiar de un móvil a otro y por eso no puedo dar un path universal, en mi caso están concretamente en la ruta /storage/sdcard0/DCIM/camera.

Un vez averiguada la ruta, salimos con "exit". Ahora, para transferir los archivos:
# mkdir camera
# adb pull -a /storage/sdcard0/DCIM/camera camera
El comando "pull" de adb realizar una transferencia recursiva de ficheros desde la ruta /storage/sdcard0/DCIM/camera de la memoria del móvil a la ruta ./camera del PC. Esta transferencia de ficheros se realiza a una velocidad endiablada: la velocidad de mover bytes sin tener que hacerlos pasar por capas y protocolos farragosos. En un tiempo razonable tenemos en el PC todos los ficheros.


Ya he hablado de la sonda india Chandrayaan 2, que ha costado menos que las elecciones del 10N en nuestra patria. En su momento esas cabezas parlantes que salen por la TV haciendo con que dan información se limitaron a comentar que el aterrizador Vikram se había estrellado. En realidad se perdió el contacto con él, no se sabe que pasó.

Bueno, pues el aterrizador era una parte de la misión. El resto ha seguido adelante haciendo fotos desde el orbitador:


Esto son fotos con una resolución de 30cm por pixel de la superficie lunar, una resolución nunca vista. Lástima que su órbita no la lleve por encima del lugar de alunizaje del Apolo XI.

Insisto: 140 millones de dolares. El 10N han sido 136 millones de euros.