Daniel López Azaña

Tema

Social Media

Blog

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

Desbloqueo automático de pantalla por proximidad de dispositivo Bluetooth

Logo Blueproximity

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.

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 <span class="skimlinks-unlinked">org.freedesktop.ScreenSaver.Lock

qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock</span>

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 
        <strong>Soft blocked: yes</strong> 
        Hard blocked: no 
5: hci0: Bluetooth 
        <strong>Soft blocked: yes</strong> 
        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!

Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Artículos relacionados

hot-button-ssh-command-widget-icon

Control remoto de Linux desde tu smartphone con botones y widgets SSH

En este artículo voy a hablar de una app para Android que es extremadamente útil para ejecutar comandos de forma remota en un ordenador Linux: Hot Button SSH Command Widget. Esta aplicación nos permitirá lanzar cómodamente cualquier comando que se nos ocurra en un ordenador remoto a través de SSH con sólo pulsar un botón en la pantalla de nuestro móvil o tablet, lo cual no sólo nos facilitará la automatización de tareas repetitivas, sino que además resulta muy interesante desde el punto de vista de la seguridad por los mismos motivos que expuse en mi artículo Desbloqueo automático de pantalla por proximidad de dispositivo Bluetooth, ya que nos permitirá por ejemplo bloquear y desbloquear la pantalla sin tener que escribir nuestra contraseña una y otra vez a la vista de otras personas.

15 de julio de 2017
ASLR concept

Diferencias entre ASLR, KASLR y KARL

A raíz de la publicación de la noticia del lanzamiento del Kernel 4.12 de Linux, el cual trae por primera vez activada por defecto la característica KASLR, y casi simultáneamente la publicación de esta otra noticia sobre la implementación de una característica llamada KARL en OpenBSD me ha parecido que sería interesante aclarar las diferencias entre estas técnicas de seguridad, pues pienso que la combinación de ambas va a ser muy importante de cara al futuro de la seguridad de los sistemas, pues van a impedir explotar vulnerabilidades relacionadas con la corrupción de memoria (buffer-overflow).

7 de julio de 2017
Linux disk partition

La importancia de particionar correctamente un disco en Linux

Soy un firme defensor de la simplicidad y del principio de que menos es más, pero en cuanto a la seguridad y el rendimiento de los sistemas de información se refiere, debemos ser capaces de encontrar un equilibrio entre mantener las cosas sencillas y exponernos lo mínimo posible a potenciales amenazas al mismo tiempo que tratamos de obtener las máximas prestaciones de los elementos que configuran nuestro sistema.

15 de marzo de 2016

Comentarios

Andrés 21 de noviembre de 2017
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.

Enviar comentario