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.


Error: Your Requested widget " ai_widget-6" is not in the widget list.
  • [do_widget_area above-nav-left]
    • [do_widget_area above-nav-right]
      • [do_widget_area footer-1]
        • [do_widget id="wpp-4"]
      • [do_widget_area footer-2]
        • [do_widget id="recent-posts-4"]
      • [do_widget_area footer-3]
        • [do_widget id="recent-comments-3"]
      • [do_widget_area footer-4]
        • [do_widget id="archives-4"]
      • [do_widget_area logo-bar]
        • [do_widget id="oxywidgetwpml-3"]
      • [do_widget_area menu-bar]
        • [do_widget id="search-3"]
      • [do_widget_area sidebar]
        • [do_widget id="search-4"]
        • [do_widget id="ai_widget-2"]
        • [do_widget id="categories-5"]
        • [do_widget id="ai_widget-3"]
        • [do_widget id="ai_widget-4"]
        • [do_widget id="ai_widget-5"]
      • [do_widget_area sub-footer-1]
        • [do_widget id="text-4"]
      • [do_widget_area sub-footer-2]
        • [do_widget_area sub-footer-3]
          • [do_widget_area sub-footer-4]
            • [do_widget_area upper-footer-1]
              • [do_widget id="search-2"]
              • [do_widget id="recent-posts-2"]
              • [do_widget id="recent-comments-2"]
              • [do_widget id="archives-2"]
              • [do_widget id="categories-2"]
              • [do_widget id="meta-2"]
            • [do_widget_area upper-footer-2]
              • [do_widget_area upper-footer-3]
                • [do_widget_area upper-footer-4]
                  • [do_widget_area widgets_for_shortcodes]
                    • [do_widget id="search-5"]
                    • [do_widget id="ai_widget-6"]
                  • [do_widget_area wp_inactive_widgets]
                    • [do_widget id="wpp-2"]
                    • [do_widget id="text-1"]
                    • [do_widget id="recent-posts-3"]
                    • [do_widget id="categories-3"]
                    • [do_widget id="archives-3"]
                    • [do_widget id="icl_lang_sel_widget-3"]

                  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:


                  Error: Your Requested widget " ai_widget-6" is not in the widget list.
                  • [do_widget_area above-nav-left]
                    • [do_widget_area above-nav-right]
                      • [do_widget_area footer-1]
                        • [do_widget id="wpp-4"]
                      • [do_widget_area footer-2]
                        • [do_widget id="recent-posts-4"]
                      • [do_widget_area footer-3]
                        • [do_widget id="recent-comments-3"]
                      • [do_widget_area footer-4]
                        • [do_widget id="archives-4"]
                      • [do_widget_area logo-bar]
                        • [do_widget id="oxywidgetwpml-3"]
                      • [do_widget_area menu-bar]
                        • [do_widget id="search-3"]
                      • [do_widget_area sidebar]
                        • [do_widget id="search-4"]
                        • [do_widget id="ai_widget-2"]
                        • [do_widget id="categories-5"]
                        • [do_widget id="ai_widget-3"]
                        • [do_widget id="ai_widget-4"]
                        • [do_widget id="ai_widget-5"]
                      • [do_widget_area sub-footer-1]
                        • [do_widget id="text-4"]
                      • [do_widget_area sub-footer-2]
                        • [do_widget_area sub-footer-3]
                          • [do_widget_area sub-footer-4]
                            • [do_widget_area upper-footer-1]
                              • [do_widget id="search-2"]
                              • [do_widget id="recent-posts-2"]
                              • [do_widget id="recent-comments-2"]
                              • [do_widget id="archives-2"]
                              • [do_widget id="categories-2"]
                              • [do_widget id="meta-2"]
                            • [do_widget_area upper-footer-2]
                              • [do_widget_area upper-footer-3]
                                • [do_widget_area upper-footer-4]
                                  • [do_widget_area widgets_for_shortcodes]
                                    • [do_widget id="search-5"]
                                    • [do_widget id="ai_widget-6"]
                                  • [do_widget_area wp_inactive_widgets]
                                    • [do_widget id="wpp-2"]
                                    • [do_widget id="text-1"]
                                    • [do_widget id="recent-posts-3"]
                                    • [do_widget id="categories-3"]
                                    • [do_widget id="archives-3"]
                                    • [do_widget id="icl_lang_sel_widget-3"]

                                  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.