Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/05/2007, à 00:09

angenoir66

Astuce: Verrouillage du pc par bluetooth

Bonjour à tous.
J'ai découvert un petit script shell sympathique qui permet de verrouiller l'ordinateur (ou de lancer n'importe quelle autre application) selon la distance à laquelle se trouve un téléphone portable par rapport au pc.
Le script original vient du site: http://gentoo-wiki.com/TIP_Bluetooth_Proximity_Monitor
La version que je vais donner est modifié, et permet de lancer automatiquement une socket rfcomm au démarrage de l'application (et elle la détruit à la fin de l'exécution). De plus, elle utilise un appel dcop pour mettre en pause amarok lorsque l'on sort de la zone, et de le ré-enclencher lors du retour. Je fais aussi appel à aumix pour mettre le canal sonore principal à zéro.
Trêve de blah blah, il est cependant à noter que ce script peut (et doit) être grandement amélioré.

ATTENTION Avec mes modifications, si amarok n'est pas lancé lors de la sortie de zone, le système X plante. Je vous conseille donc de récupérer le script original sur le lien cité plus haut.

Variables à modifier:
DEVICE : Adresse MAC du périphérique bluetooth concerné. (utilisez "hcitool scan" pour la connaître)
INTERVAL : Durée en secondes entre les vérifications de l'éloignement du périphérique.
MIN_RSSI : Éloignement du périphérique à partir duquel le script considère qu'il est hors zone.
HCITOOL : Emplacement de l'exécutable de hcitool (utilisez "which hcitool" pour le connaître)
DATE : Format de la date pour le log [décommentez la ligne "#echo $1 >> /var/log/BTProximity.log" pour enregistrer le log dans le fichier spécifié, sinon il n'apparaîtra qu'en console]

fichier: /usr/local/bin/btproximity

#!/bin/bash

# BTProximity by Thomas Kear <qupada@initng.org>
# Inspired by scripts from gentoo-wiki.com, but designed for KDE users
# No warranty expressed or implied, if it breaks you get to keep both pieces.

DEVICE="00:00:00:00:00:00"  # Use 'hcitool scan' to find
INTERVAL="2"  # Seconds
MIN_RSSI="-5"  # Min = -10
HCITOOL="/usr/bin/hcitool"
DATE="date +%X"  # Format to log times in, default = HH:MM:SS (24 hour), 'date --help' for info

#rfcomm connect 0 $DEVICE&

log () {
        # Log to console
        echo $1

        # Log to file
        #echo $1 >> /var/log/BTProximity.log
}

# Script to run when device leaves proximity
device_out () {
        log "`${DATE}`: Device left proximity"
        proximity="out"
        # Only change commands below this line
        dcop kdesktop KScreensaverIface lock &> /dev/null  # Start KDE Screensaver
        dcop amarok player pause &> /dev/null &
        aumix -v 0 &> /dev/null &
}

#Script to run when device enters proximity
device_in () {
        log "`${DATE}`: Device entered proximity"
        proximity="in"
        # only change commands below this line
        killall -9 kdesktop_lock &> /dev/null &  #  Stop KDE Screensaver.  -9 might seem a bit harsh, but works fine
        dcop amarok player play &> /dev/null &
        aumix -v 100 &> /dev/null &
}

#  This keeps trying to connect until it succeeds, may cause a few % CPU usage, but better than failing to unlock
connect () {
        while `check_disconnected`
        do
                /usr/bin/hcitool cc ${DEVICE}
                if `check_connected`
                then
                        log "`${DATE}`: Connected to `${HCITOOL} name ${DEVICE}` (${DEVICE})"
                        sleep 3  # RSSI returns stupid values if measured immediately after connecting, wait a couple of seconds
                fi
        done
}

#Returns 0 if connected, 1 otherwise
check_connected () {
        [[ -n `${HCITOOL} con | grep ${DEVICE}` ]] && return 0 || return 1
}
#Opposite of above, 1 if connected
check_disconnected () {
        [[ -z `${HCITOOL} con | grep ${DEVICE}` ]] && return 0 || return 1
}


rfcomm connect 0 $DEVICE&> /dev/null &

proximity="in"
while `/bin/true`
do
        #Connect to bluetooth device
        check_disconnected && connect

        #Get RSSI from bluetooth device
        rssi=`${HCITOOL} rssi ${DEVICE} | gawk -F\:\  '{print $2}'`
        if (( ${rssi} <= ${MIN_RSSI} ))
        then
                # Exit proximity
                [[ ${proximity} == "in" ]] && device_out
        else
                # Enter proximity
                [[ ${proximity} == "out" ]] && device_in
        fi

        # Wait for interval set at the top, and cycle
        sleep ${INTERVAL}
done

Dernière modification par angenoir66 (Le 13/05/2007, à 00:10)


/etc/init.d/ est un nid de démons, les démons vous dis-je, les terrrrribles démons...

Hors ligne

#2 Le 13/05/2007, à 09:29

clem-vangelis

Re : Astuce: Verrouillage du pc par bluetooth

en fait ya pas mal de truc a changer pour que ça amrche sous gnome

mais faudra que je test que j'aurais un tel portable qui supporte le bluetooth , en attendant hop marque-page

Dernière modification par clem-vangelis (Le 16/05/2007, à 21:02)

Hors ligne

#3 Le 06/10/2007, à 22:57

Flew

Re : Astuce: Verrouillage du pc par bluetooth

Une version graphique avec un paquet .deb est sortie \o/

--> version 1.2


(\__/)
(='.'=)
(")_(")

Hors ligne