Bloqueo y desbloqueo de pantalla por detector de presencia en Ubuntu con bluetooth: aimtooth

En la oficina soy la comidilla de todos los días gracias a mi script para bloquear y desbloquear la pantalla, cuando me alejo o me acerco a mi puesto, respectivamente. Me tildan de friki, los muy microsofteros ;) Ha tenido tanto éxito, que he decidido compartirlo con mis lectores.

La idea es la siguiente: el PC busca cada n segundos mi terminal móvil con bluetooth, si lo encuentra mide la distancia desde el PC a mi móvil (en realidad detecta la calidad del enlace, lo que podemos transformar en distancia) , y si mi móvil está dentro de la distancia estipulada, se considera como presencia, y si no, como no presencia. Si la pantalla está activada y detecta no presencia, entonces bloquea la pantalla, y si detecta presencia y la pantalla está bloqueada, la desbloquea.

Pensaba que la batería de mi móvil se resentiría demasiado por tener todo el día activado el bluetooth, pero lo cierto es que apenas aprecio diferencia alguna (Sonyericsson W800i).

aimtooth

El script lo hice en bash, y es bastante rudimentario, aunque ya estoy preparando un script mejor logrado en Python (FUD gratuito: odio Perl, viva Python) usando la PyBluez.

La configuración es bien sencilla, primero buscamos el id y el nombre de nuestro móvil con hcitool:

$ hcitool scan
00:00:00:00:00:00 Tux Movil

Si ves un listado enorme, mira en tu móvil qué nombre tienes puesto para bluetooth.

El id (00:00:00:00:00:00) hay que ponerlo en la variable ID, y el nombre (Tux Movil) en la variable NAME, dentro del script:

ID="00:00:00:00:00:00"
NAME="Tux Movil"

Lo siguiente será establecer las variables ON_CONNECT y ON_DISCONNECT, donde pondremos la sentencia a ejecutar cuando el script detecte presencia (después de haber detectado no presencia), y cuando detecte no presencia, respectivamente:

ON_CONNECT="sudo -u tux gnome-screensaver-command --deactivate"
ON_DISCONNECT="sudo -u tux gnome-screensaver-command --lock"

Eso es para desbloquear y bloquear el salvapantallas de Gnome con el usuario tux. Usamos sudo ya que el script se debe ejecutar como root. Desconozco los comandos para bloquear y desbloquear la pantalla en KDE, pero no será muy distinto.

Por último, sólo nos queda ejecutar el script:

$ sudo ./aimtooth

Y si lo queremos en modo demonio:

$ sudo ./aimtooth >/dev/null &

Podéis hacer también que suene algún tema musical al salir o entrar (en mi oficina suena Carmina Burana cada vez que entro), que os diga “bienvenido señor Martínez” (con festival), o qué se yo… dejad volar la imaginación ;)

El código original se perdió en una migración de servidor, pero he conseguido recuperar esta versión, algo más reducida, desde la web de Ubuntu en Español:

#!/bin/bash
export INTERFACE="6H:A8:84:4B:54:F6"
while true; do
    hcitool cc ${INTERFACE}
    sleep 1
    Signal="`hcitool lq ${INTERFACE}`"
    echo $Signal
    if [ "${Signal##*: }" -lt 240 ]; then
        echo "Baja señal"
        sudo -u scorpyo gnome-screensaver-command --lock
    else
        if [ "${Signal##*: }" -gt 240 ]; then
            echo "Conectado"
            sudo -u scorpyo gnome-screensaver-command --deactivate
        else
            echo "Desconectado"
            sudo -u scorpyo gnome-screensaver-command --lock
        fi
    fi
    hcitool dc ${INTERFACE}
done

59 comentarios

  1. Muy bueno, gracias por el script. Lo voy a probar en mi flamante escritorio Ubuntu.

    Después de tres años usando Fedora Core, cambié de portátil y como venía con el inefable Windows me quedé con el por pura pereza, al principio unos días al final casi un año hasta que hace unos días decidí volver a Linux y probar Ubuntu.

    Creo que no podría haber tomado mejor decisión, y encima lo complementamos con cositas como esta ;-)

  2. Hola,

    Una idea fantástica, me encanta tu script. Lo voy a usar ahora mismo. Cuanto tengas el nuevo avisa!!!. Te doy ideas para el nuevo que vas a hacer: se le podría añadir algo similar a esa alarma antirrobo de Apple, si se la da a una opción determinada se bloquea el portátil y suena la alarma cuando se aleja del móvil… Es sólo una idea. Muchas gracias por el script

  3. Aleksander Stukov

    Aco*onante!, funciona de perlas, de perlas de perlas de perlas. He tenido que modificar la señal porque el bluetooth que tengo tiene bastante fuerza (100m) y para que bajara de 205 (creo que estaba así) tenía que cambiarme de país, pero juas, he quedao como el mas Humphrey del vecindario. ¡Eres un artista!.

  4. Hola, la idea esta genial, pero a mi no me funciona; me devuelve esto: lcmg@ortigosano:~$ HCI read_link_quality request failed: Input/output error

    HCI read_link_quality request failed: Input/output error

    HCI read_link_quality request failed: Input/output error

    HCI read_link_quality request failed: Input/output error

    HCI read_link_quality request failed: Connection timed out

    gracias

    salu2

  5. kanamor

    Es perfecto, muchas gracias por tu aporte, me ha encantado. Una pregunta, es posible que el script guarde un log o algo? lo digo para cuando lo lancemos como demonio poder comprobar el log.

    Felicidades por el script.!!

  6. ShADoW_LnX

    Excelente, lo probe y me funciono con el Sony Ericcson T610 con en Ubuntu Edgy Eft, y con un adaptador bluetooth usb, se pueden hacer cosas muy buenas, gracias Javier, alguien sabe algunas cosas interesantes para bluetooth similar a esta aplicación???

  7. Pues yo tengo este problema y no me funciona:

    AIMTOOTH: conectado al dispositivo

    AIMTOOTH (16:05:37): CONNECT=1 / Q=255 / QLAST=255 / QM=255 / QCOUNTER=0

    AIMTOOTH (16:05:40): CONNECT=1 / Q=255 / QLAST=255 / QM=255 / QCOUNTER=0

    AIMTOOTH (16:05:43): CONNECT=1 / Q=255 / QLAST=255 / QM=255 / QCOUNTER=0

    Not connected.

    AIMTOOTH: problemas de conexion

    AIMTOOTH (16:05:47): CONNECT=1 / Q=0 / QLAST=0 / QM=0 / QCOUNTER=4

    AIMTOOTH: se detectó ausencia!

    sudo: no passwd entry for tux!

    Gracias por tu script.

    Saludos.

  8. Gil: Debes poner tu nombre de usuario (el que uses para acceder a Gnome) en la variable ON_CONNECT y ON_DISCONNECT, sustituyendo a "tux".

    ON_CONNECT="sudo -u TUNOMBREDEUSUARIO gnome-screensaver-command –deactivate"

    ON_DISCONNECT="sudo -u TUNOMBREDEUSUARIO gnome-screensaver-command –lock"

    Gracias a todos por los elogios ;)

  9. Ya está corregido, pero si bien ahora no hace mención a ninguna contraseña, el error es el mismo, me lo reconoce en un primer momento pero despues de 3 barridos donde aparece como conectado, al cuarto:

    AIMTOOTH: conectado al dispositivo

    AIMTOOTH (17:37:51): CONNECT=1 / Q=255 / QLAST=255 / QM=255 / QCOUNTER=0

    AIMTOOTH (17:37:54): CONNECT=1 / Q=255 / QLAST=255 / QM=255 / QCOUNTER=0

    AIMTOOTH (17:37:57): CONNECT=1 / Q=255 / QLAST=255 / QM=255 / QCOUNTER=0

    Not connected.

    AIMTOOTH: problemas de conexion

    AIMTOOTH (17:38:02): CONNECT=1 / Q=0 / QLAST=0 / QM=0 / QCOUNTER=4

    AIMTOOTH: se detectó ausencia!

    Y ahora si que bloquea la pantalla, pero el movil está al lado.

    Gracias.

  10. me funciona de manera extraña, dice en la consola not connected, y ahorita me bloqueo la pantalla con el telefono al lado, me fui y regresé y no se desbloqueó, de todas maneras es muy buena idea, hay un programa que se llama bluemon que consegui y hace algo parecido a este

    saludos

  11. Hola, buenas, soy un newbbiee en el mundillo linux pero ya estoy conociendo mas este gremio. Encontre este post y probe a modificarlo, todo sin problemas, salvo que parece ser que mi dispositivo usb bluetooth no detecta a mi nokia 6630(obviamente con el bluetooth activado). Tengo contraseña en mi sesion de GNOME(Ahora pruebo con GNOME porque tengo los comandos, pero uso KDE), y pienso que pudiera ser que no tuviera el script bien configurado. GRACIAS Y ENHORABUENA.

  12. ShADoW_LnX

    Una consulta como puedo hacer que se bloquee la pantalla y al mismo tiempo que el festival diga algo como Bloqueando sistema Activando sistema? se que el comando seria

    ON_CONNECT="festival –language spanish –tts /home/victor/Desktop/activando"

    Pero lo que no se es como hacer para que al mismo tiempo bloquee la pantalla y viceversa

  13. ShADoW_LnX que te parece hacer esto:

    ON_CONNECT="./tu_script"

    Y en tu_script hacerte un script sencillito que ponga:

    sudo -u tux gnome-screensaver-command –deactivate

    festival –language spanish –tts /home/victor/Desktop/activando

    Nose, yo lo haría asi, y si no, poniendo los dos comandos en la variable ON_CONNECT separados por ; y fiesta :D

  14. Luis Palacios

    Genial, lo pruebo en mi linux en breve. Por cierto, para los que también seáis adictos al Mac, acabo de comprobar dicha funcionalidad en un soft que se llama BluePhone y también funciona (ojo que es de pago, pero muy asequible).

    Gracias por el script y la idea !

  15. Hola, tengo Ubuntu y un Nokia N73, al aprecer hay gente que también le pasa, y es que el programa funciona, pero al poco tiempo detecta que no está cuando sí que está, esto es porque al parecer, la conexion creada con el hcitool se cierra y claro, no detecta el dispositivo, así que habría que comprobar si la conexion se ha cerrado, a volver a abrirla y no solo una vez. A ver si tengo tiempo y lo reprogramo para que tenga en cuenta esto.

  16. Muy buen script!

    Lo único es que debería verificar cada dos o tres ping, desconectándose en caso de error, para no apagar la pantalla si sólo fue un error de conexión momentáneo, lo que ocurre si el dispositivo bluetooth es barato, como el mío :P

  17. a mi me pasa lo mismo que a gil, falta algo como para que no pierda la conexion con el movil, porque si del movil intento mandarle una foto a la pc se desactiva el protector de pantalla, pero luego de eso pierde la conexion y se vuelve a bloquear la pantalla.

  18. Pues lo que promete tu script suena excelente, sólo que por el momento no me interesa probarlo (hasta que compre mi portátil) y si me interesa esperar a que liberen el nuevo script ya con las nuevas funciones.

    Si con su permiso, prometo darle publicidad a toda la comunidad ubuntu (claro que sin payasadas, el crédito es totalmente tuyo y bien merecido).

    Ojalá al poner este mensaje el sistema me notifique de nuevas respuestas a esta entrada. Gracias por compartir.

  19. ¡Hola!

    Buscando cosillas del bluetooth he llegado hasta aquí, no pretendo robar protagonismo ni mucho menos, simplemente que yo hice un script parecido hace 2 añitos o así.

    http://www.eupla.org/index.php?dcha=foro/comentario.php&comentario=84622&f=15

    Le he echado un ojo al tuyo y parece más completo pero es la misma idea.

    Que conste que no te estoy acusando de nada,eh!? ;) es simplemente por si te apetece comprar tu script con el mío.

    Un saludo

  20. Buenas!

    He probado el script en Ubuntu 7.04 con un adaptador bluetooth usb de 12eur, y lanzo el script pero al poco tiempo como al resto… me salta el salvapantallas a pesar de estar el teléfono al lado del receptor.

    Sera cuestion del movil? (Nokia 5200)

    Sera cuestion del bluetooth? (made in taiwan comprado en PCBox, semitransparente y con la luz roja toooodo el rato parpadeando una vez conectado al usb)

    Si alguien tiene idea… que ayude a los que no nos tira.

    Y cuando tengas la siguiente version, bienvenida sea!

  21. Buenas, tras experimentar con el script de deteccion de bluetooth y entre los compañeros de la facultad, hemos elaborado un script más simple y sencillo para detectar la presencia de un determinado mobil dentro del rango de la piconet (red bluetooth), puesto que el original no fue posible hacerlo funcionar. Nos gustaría saber vuestra opinión al respecto, saludos!!

    #!/bin/bash

    export INTERFACE="00:00:00:00:00:00"

    while true; do

    hcitool cc ${INTERFACE}

    sleep 1

    Signal="`hcitool lq ${INTERFACE}`"

    echo $Signal

    if [ "${Signal##*: }" -lt 220 ]; then

    echo "Baja señal"

    sudo -u username gnome-screensaver-command –lock

    else

    if [ "${Signal##*: }" -gt 220 ]; then

    echo "Conectado"

    sudo -u username gnome-screensaver-command –deactivate

    else

    echo "Desconectado"

    sudo -u username gnome-screensaver-command –lock

    fi

    fi

    hcitool dc ${INTERFACE}

    done

  22. Hola, alguien puede decirme si existe un detector de presencia para conectar a un puerto USB de mi ordenador, de modo que cuando detecte presencia se active la pantalla.
    El ordenador está siempre encendido y tiene que ser USB.
    Gracias

  23. Gracias. ¿Qué es FUD?

    Para que nunca se pueda bloquear la pantalla (p.e. con Ctrl+Alt+L, la opción del menú, tras cambio de usuario o tras suspensión del ordenador) ejecutamos gconf-editor y marcamos la casilla de /desktop/gnome/lockdown/disable_lock_screen.

    Así, no podremos poner en el panel el applet o botón de bloqueo de pantalla (lock screen button), y si estaba puesto, quedará inactivo o desactivado (no funcionará).

    Y en el salvapantallas no estará disponible la opción “Bloquear pantalla cuando el salvapantallas esté activo”, y si estaba activada, además, se desactivará.

    Esto es en GNOME clásico. Con MATE creo que hay que ejecutar mateconf-editor e ir a /desktop/mate/lockdown/disable_lock_screen.

Escribe un comentario

*