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 ;)

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 ;-)
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
Ahora a probarlo a ver que tal funciona, pero la idea es buena ;)
GRACIAS!
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
Felicidades por el script.!!
Saludos
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.
ON_CONNECT="sudo -u TUNOMBREDEUSUARIO gnome-screensaver-command --deactivate"
ON_DISCONNECT="sudo -u TUNOMBREDEUSUARIO gnome-screensaver-command --lock"
Gracias a todos por los elogios ;)
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.
saludos
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
Un saludo.
Un saludo.
packages.debian.org/unstable/net/bluemon
/>
saludos
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
Gracias por el script y la idea !
P.D.: Es un Nokia N70
pastebin.ca/418984
/>
Ojala Javier Perez me puedas contestar a mi correo o aqui mismo en el blog para mi seria de mucha ayuda, sin mas que decir gracias y excelente blog!!!! :D
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
Gracias por vuestros comentarios :)
Si quieres, te envío el código de la mía basada en tu idea original o directamente trabajamos en una conjuntamente mezclando ambas.
Pablo
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.
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í.
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
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!
gracias, un saludo, dz
www.cesarius.net/blueproximity-bloquea-y-desbloquea-la-pantalla-con-detector-de-presencia-en-ubuntu/
#!/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
El ordenador está siempre encendido y tiene que ser USB.
Gracias
busca en google "udev usb"
un saludo
daniel
muchas gracias por el aporte!!!