Cambiar de escritorio automáticamente en Linux Mint mediante una señal recibida desde un sensor con mqtt.

Objetivo: Cuando se active un sensor de movimiento nos cambiará de un escritorio a otro. Esto lo haremos mediante un sensor PIR o un sensor de tipo radar conectado a un dispositivo con ESP8266 mediante el protocolo mqtt. (Primera parte)

Este tutorial da una respuesta a todos aquellos que les gustaría que el escritorio de su PC con Linux Mint cambiara a otro que oculte lo que estás viendo o haciendo  en ese momento, justo cuando alguien (tu jefe, tus padres, tu novia o novio, marido o mujer) pase por delante de un sensor que hemos puesto en la entrada del domicilio o de nuestra puerta de la habitación.

Tenemos dos partes bien diferenciadas:

La primera parte que llamaremos configuración en PC, es la creación de un script que se ejecutará en nuestro Linux Mint y que estará escuchando de manera continua la recepción de un mensaje con el protocolo mqtt. Dicho script simulará la pulsación de las teclas CTRL+ALT+Flecha_Derecha con lo que se nos pasará a otro escritorio.

La segunda es la configuración del sensor. Usaremos un Wemos D1 mini con un sensor de tipo radar que enviará un aviso por mqtt cada vez que se activa. Se puede hacer también con un sensor PIR, sensores magnéticos tales como de tipo reed o de efecto hall. Esta parte la publicaremos más adelante.

Configuración en PC

1.-Instalación de paquetes necesarios.

Instalaremos un emulador de teclado llamado xdotool, y un cliente de mosquitto para poder escuchar las alarmas que envía el sensor. Abriremos un terminal y escribiremos:

sudo apt-get update; apt-get install xdotool mosquitto-clients python-mosquitto

2.- Creación del script

Este script se quedará escuchando a que se publique en un servidor mqtt la señal de alarma en un topic llamado “avisador“. Usaremos un servidor público en internet que es test.mosquitto.org.

En el terminal hacemos:

nano avisador.sh

Se nos abrirá un editor de texto y pondremos lo siguiente:

#!/bin/bash
# Configuración del broker a escuchar.
broker="test.mosquitto.org"
port="1883"
topic_input="avisador"

#Ponemos el cliente de mosquitto escuchando
mosquitto_sub -t $topic_input -h $broker| while read value; do
case $value in
"alarma")
#--------------------------------------------------------------
#Realizamos un cambio de escritorio
xdotool key "CTRL+ALt+Right";;
#--------------------------------------------------------------
esac
done

Salimos del editor con CTRL+X y a continuación le damos permiso de ejecución al script.

chmod +x avisador.sh

Sólo queda ejecutarlo y dejarlo en background con un & al final.

./avisador.sh&

3. Prueba de funcionamiento.

Desde un terminal envaremos un mensaje de alarma por mqtt al servidor. Pondremos lo siguiente:

mosquitto_pub -t "avisador" -m "alarma" -h "test.mosquitto.org"

Para parar el script pondremos lo siguiente:

killall avisador.sh

Un comentario en “Cambiar de escritorio automáticamente en Linux Mint mediante una señal recibida desde un sensor con mqtt.

  1. Si creamos un script que se inicie en los ordenadores de una red, con usuarios no administradores, en rc.local podemos controlar la red por MQTT
    #!/bin/bash
    # Configuración del broker a escuchar.
    broker=”192.168.1.2″
    port=”1883″
    topic_input=”fpb1″
    usuario=`who|head -1|awk ‘{printf $1}’`
    echo -e $usuario

    #Ponemos el cliente de mosquitto escuchando
    mosquitto_sub -t $topic_input -h $broker| while read value; do
    case $value in
    “firefox”) kill $(pidof firefox);;
    “derecha”) su $usuario -c “export DISPLAY=’:0.0′;/usr/bin/xdotool key CTRL+ALT+Right”;;
    “izquierda”) su $usuario -c “export DISPLAY=’:0.0′;/usr/bin/xdotool key CTRL+ALT+Left”;;
    “tab”)echo “tab”; xdotool key “CTRL+meta”;;
    “eject”) eject -r;;
    “cerrar”) eject -t;;
    “bajar”) wondershaper eth0 250 250;;
    “apagar”) dbus-send –system –print-reply –system –dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop;;
    “sonido”) amixer sset Master mute;;

    esac
    done

Responder a Jose Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.

72 − = 69