GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Desbloqueo automático de pantalla por proximidad de dispositivo Bluetooth

1 comentario

Una de las medidas de seguridad más básicas y habituales que podemos adoptar en nuestro entorno de trabajo es proteger nuestro ordenador mediante el bloqueo automático de la pantalla transcurrido un cierto período de inactividad, de modo que para desbloquearla sea necesario introducir nuestra contraseña. Pero hay una medida más eficaz, y que consiste en configurar nuestra máquina Linux para que la proximidad de un dispositivo Bluetooth de nuestra propiedad, por ejemplo nuestro móvil o un smartwatch, provoque automáticamente el bloqueo o desbloqueo de la pantalla sin que sea necesario introducir ninguna secuencia en el teclado.

En un mundo ideal nos acordaríamos siempre de bloquear la pantalla cuando nos ausentamos de nuestro puesto de trabajo para impedir así que otra persona pueda manipular nuestro ordenador durante nuestra ausencia. Sin embargo, a veces sucederá que nos descuidaremos y olvidaremos hacerlo, poniendo así en riesgo la seguridad de nuestra información. Pero aunque nos acordáramos siempre de bloquear la pantalla, el hecho de desbloquearla una y otra vez cada cierto tiempo en presencia de otras personas o en entornos no controlados también supone un riesgo importante para la seguridad, ya que estaremos exponiendo nuestra contraseña cada vez que la tecleamos, ya sea porque alguien nos vea escribirla directamente o porque una cámara de vigilancia registre la secuencia que introducimos en nuestro teclado.

Por tanto, con la solución que aquí propongo minimizamos los dos riesgos: olvidarnos de realizar el bloqueo y exponer nuestra contraseña cada vez que la escribimos.

Instalación y configuración de la utilidad Blueproximity

Smartphone Bluetooth

Smartphone Bluetooth

Se trata de una aplicación que se encarga de vigilar constantemente el nivel de intensidad de la señal de un dispositivo Bluetooth que vincularemos a nuestro ordenador, de forma que si nos alejamos de éste con nuestro móvil y la fuerza de la señal cae por debajo de un umbral dado durante un período de tiempo determinado (ambos parámetros los podemos definir a nuestro gusto), se ejecutará el comando que nosotros queramos, que en principio será un comando cuyo cometido será bloquear la pantalla. También al contrario, cuando el nivel de señal se recupere porque nos acerquemos de nuevo al ordenador, se ejecutará el comando de desbloqueo de la pantalla sin que nosotros tengamos que hacer nada.

La instalación de la aplicación Blueproximity es muy sencilla, pues al estar disponible en los repositorios de las principales distribuciones Linux lo haremos de la forma habitual:

Debian/Ubuntu:

~$ sudo apt-get install blueproximity

Fedora/Red Hat/Centos:

~$ sudo yum install blueproximity

Arch Linux:

~$ sudo yaourt -S blueproximity –noconfirm

Comandos habituales de bloqueo/desbloqueo

Una vez instalado el paquete blueproximity tendremos que proceder a vincular nuestro dispositivo Bluetooth, a establecer los umbrales para el nivel de intensidad y ajustar los comandos de bloqueo y desbloqueo que mejor se adapten a nuestro entorno de escritorio y a los objetivos que queremos conseguir.

Preferencias de BlueProximity: emparejamiento de dispositivo

Preferencias de BlueProximity: emparejamiento de dispositivo

Preferencias de BlueProximity: detalles de proximidad

Preferencias de BlueProximity: detalles de proximidad

Preferencias de BlueProximity: comandos de bloqueo

Preferencias de BlueProximity: comandos de bloqueo

A continuación indico los comandos de bloqueo/desbloqueo más habituales según el entorno gráfico que tengamos instalado. El tercer comando que aparece en el cuadro de diálogo de configuración (Proximity command) se ejecuta periódicamente según el intervalo de tiempo seleccionado siempre que nuestro dispositivo Bluetooth se encuentre dentro de rango. Esto puede utilizarse para ejecutar un comando que simule actividad del usuario para que nunca se bloqueé la sesión aunque no haya actividad si el usuario está cerca o simplemente el mismo comando que usemos para el desbloqueo.

Gnome

Blueproximity es una aplicación Gnome, por lo que por defecto vendrá configurada con los siguientes comandos:

Bloqueo:

gnome-screensaver-command -l

Desbloqueo:

gnome-screensaver-command -d

Cinnamon

Bloqueo:

cinnamon-screensaver-command -l

Desbloqueo:

cinnamon-screensaver-command -d

Mate

Bloqueo:

mate-screensaver-command -l

Desbloqueo:

mate-screensaver-command -d

KDE

En este caso indico dos comandos porque el segundo se corresponde con versiones antiguas de KDE anteriores a la versión 4.13.

Bloqueo:

dbus-send –type=method_call –dest=org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Lock

qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock

Desbloqueo:

qdbus | perl -ne ‘qx/kquitapp $1/ if /(kscreenlocker_greet-\d+)/’

killall -9 kscreenlocker

Plasma Desktop 5

Bloqueo:

loginctl lock-session

Desbloqueo:

loginctl unlock-session

Otros

Bloqueo:

xscreensaver-command -lock

Desbloqueo:

pkill xscreensaver

Precauciones

Es importante tener en cuenta que el paquete blueproximity tiene varias dependencias que deberemos satisfacer si nuestra distribución de Linux no las trae por defecto:

bluez-utils python-gtk2 python-glade2 python-configobj python-bluez

Puede ocurrir que a pesar de estar la aplicación bien instalada y configurada y todas sus dependencias resueltas, el controlador de Bluetooth de nuestro sistema aparezca como bloqueado (Soft blocked):

~# rfkill list 
1: phy0: Wireless LAN 
        Soft blocked: no 
        Hard blocked: no 
2: asus-wlan: Wireless LAN 
        Soft blocked: no 
        Hard blocked: no 
3: asus-bluetooth: Bluetooth 
        Soft blocked: yes 
        Hard blocked: no 
5: hci0: Bluetooth 
        Soft blocked: yes 
        Hard blocked: no

Si nuestro ordenador tiene un botón físico para activar o desactivar la función de Bluetooth entonces será el parámetro Hard blocked el que estará a yes.

Para desbloquear el controlador de Bluetooth emplearemos el siguiente comando:

~# rfkill unblock bluetooth

Otras veces, aunque desbloqueemos el controlador, éste se encuentra apagado (power off). Esto ocurre por ejemplo si estamos trabajando con un ordenador portátil que no está enchufado a su adaptador de corriente, sino que está utilizando la batería. Puede ocurrir que los ajustes de ahorro de energía que trae por defecto nuestra distribución Linux hagan que el controlador Bluetooth se apague automáticamente cuando arranca el sistema y tengamos que arrancarlo a mano:

~# bluetoothctl  
[bluetooth]# power on
Changing power on succeeded

Dado que el comando anterior es interactivo, podemos utilizar mejor el siguiente que no requerirá de nuestra intervención y lo podremos usar por ejemplo en un script:

~# hciconfig hci0 up

Otras cosas interesantes que podemos hacer automáticamente además de bloquear/desbloquear la pantalla

Hay otras cosas interesantes que podemos hacer cuando nuestro dispositivo Bluetooth vinculado se acerca o se aleja de nuestra máquina aparte de bloquearla o desbloquearla. Podemos configurar Bluproximity para que ejecute comandos de bloqueo y desbloqueo más sofisticados, e incluso crear nuestros propios scripts para hacer multitud de cosas a la vez. Aquí dejo algunas ideas que os pueden resultar útiles:

Apagar y encender la pantalla

Aparte de realizar el oportuno bloqueo o desbloqueo podemos hacer que la pantalla también se apague cuando nos alejamos y se vuelva a encender cuando nos aproximamos para ahorrar energía. Para ello añadiremos el comando de apagado/encendido a los comandos de bloqueo/desbloqueo que vimos arriba. Por ejemplo:

Bloqueo:

loginctl lock-session && xset dpms force off

Desbloqueo:

xset dpms force on && loginctl unlock-session

Enviar una notificación push a nuestro smartphone

Para este ejemplo utilizo la siguiente librería para enviar notificaciones push a nuestro móvil desde la línea de comandos a través del servicio Pushbullet: https://github.com/GustavoKatel/pushbullet-cli.

Bloqueo:

loginctl lock-session && pb push "Pantalla bloqueada a las $(date +%H:%M:%S) del $(date +%d/%m/%Y)"

Desbloqueo:

pb push "Pantalla desbloqueada a las $(date +%H:%M:%S) del $(date +%d/%m/%Y)" && loginctl unlock-session

Parar e iniciar la reproducción de canciones en Spotify

Bloqueo:

loginctl lock-session && dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause

Desbloqueo:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play && loginctl unlock-session

Cambiar el estado de nuestro cliente de chat a No disponible/Disponible

Bloqueo:

loginctl lock-session && purple-remote "setstatus?status=away&message=No disponible"

Desbloqueo:

purple-remote "setstatus?status=available&message=" && loginctl unlock-session

Iniciar/parar a grabar vídeo con nuestra webcam

Bloqueo:

loginctl lock-session && streamer -q -c /dev/video0 -f rgb24 -r 3 -o ~/outfile.avi
loginctl lock-session && ffmpeg -f oss -i /dev/dsp -f video4linux2 -s 320x240 -i /dev/video0 out.mpg

Desbloqueo:

pkill streamer && loginctl unlock-session
pkill ffmpeg && loginctl unlock-session

¡Si se te ocurren más ejemplos no dudes en hacer tu aportación escribiendo un comentario!



 

Sobre el autor

Daniel López Azaña
Arquitecto de soluciones Cloud AWS & Linux Sysadmin Freelance

Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, AWSi, DevOps, DevSecOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

DanielDesbloqueo automático de pantalla por proximidad de dispositivo Bluetooth

Artículos relacionados

1 comentario

Unirte a la conversación
  • Andrés - 21/11/2017 responder

    Buenas tardes, es muy interesante la aplicación, lo único que me llama la atención es que me solicita permisos en el celu para acceder al chip (SIM) y a los mensajes, le niego el acceso y Blueproximity no funciona.

Deja una respuesta

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