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 20/10/2010, à 23:18

thurston

[RESOLU] Detection période inactivité souris pour script bash

Bonjour,

Je souhaiterais écrire un script qui ne lance une action qu'en cas d'inactivité donnée (une période de temps) sur la souris (usb).
Quelqu'un saurait il comment faire?
J'ai cherché sur le web mais pas de solution simple jusqu'à maintenant
J'ai l'impression qu'il faut scruter un fichier ou un truc du genre...
D'avance merci
Thurston

Dernière modification par thurston (Le 21/10/2010, à 20:31)

Hors ligne

#2 Le 21/10/2010, à 02:29

chopinhauer

Re : [RESOLU] Detection période inactivité souris pour script bash

T'es pas plutôt intéressé à l'inactivité de la session ? GNOME ScreenSaver exporte cette donnée, une fois qu'il considère la session inactive. Il l'exporte de maintes manières, une manière de la récupérer est demander à ConsoleKit via l'interface D-Bus.

Par exemple le script suivant va écrire "BOOM!!!" chaque fois la session dévient inactive :

#!/bin/bash
# Est-ce ma session ?
is_me() {
    local session
    session="$1"
    user=`dbus-send --print-reply --system --dest=org.freedesktop.ConsoleKit\
               "$session" org.freedesktop.ConsoleKit.Session.GetUser |\
        awk '$1~/uint32/{print $2}'`
    [ "$user" -eq "$UID" ]
    return $?
}
# La session est inactive ?
is_session_idle() {
    local session
    session="$1"
    idle=`dbus-send --print-reply --system --dest=org.freedesktop.ConsoleKit\
        "$session" org.freedesktop.ConsoleKit.Session.GetIdleHint |\
        awk '$1~/boolean/{print $2}'`
    [ "$idle" = "true" ]
    return $?
}

while read -a entry; do
    session=${entry[4]}
# Est-ce que c'est le signal de changement d'état d'une session ?
    if [ "${entry[5]}" = "org.freedesktop.ConsoleKit.Session" -a\
          ${entry[6]} = "IdleHintChanged" ]; then
               if is_me $session && is_session_idle $session; then
                     ### FAIRE BEAUCOUP DE BRUIT ###
                     echo "BOOM!!!"
               fi
    fi
# Écoutons les messages qui concernent les sessions…
done < <(dbus-monitor --profile --system "type='signal',\
sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Session'")

Dernière modification par chopinhauer (Le 21/10/2010, à 02:39)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 21/10/2010, à 08:13

thurston

Re : [RESOLU] Detection période inactivité souris pour script bash

Bonjour et merci chopinhauer

En fait je n'utilise pas gnome, car c'est sur un serveur où je n'ai que X d'installé, puis xbmc est lancé.
Je veux me faire un programme d'auto shutdown, en prenant en compte une durée d'inactivité, le positionnement dans la journée, etc...
Comme pas gnome, programme à écrire reprennant l'idée d'un arrêt arpès inactivité de la souris qui reflète le mieux si un utilisateur est devant la télé, car xbmc est piloté à la souris
Merci
A+
Thurston

Hors ligne

#4 Le 21/10/2010, à 10:59

BadZoot

Re : [RESOLU] Detection période inactivité souris pour script bash

Salut,

Il existe un fichier :

/dev/psaux
# ou alors
/dev/input/mice

Dans lequel les mouvements de souris et les boutons appuyés sont enregistrés.
Peut-être pourras-tu obtenir la date de modification.

Bonne journée.

Dernière modification par BadZoot (Le 21/10/2010, à 11:01)


Le pervers père de Pierre perd son imper' vert.

No, I am Zoot's identical twin-sister : Dingo.

Hors ligne

#5 Le 21/10/2010, à 18:21

thurston

Re : [RESOLU] Detection période inactivité souris pour script bash

Bon ben j'ai trouvé ici
http://mydebian.blogdns.org/?p=179

Je repends les 2 scripts
le 1er pour détecter l'interruption de la souris

#!/bin/bash

# this script will find the line of /proc/interrupts which is related to a particular device.
# There should be no dangerous line of code that could harm your system but please consider it
# as a "Use the software at your own risk!" product.

#seconds for each part of the test. Don't set it below 1 second.
sec=5;
#the threshold above which we catch a "movement"
gap=5;

# YOU SHOULD NOT EDIT THE LINES BELOW THIS POINT

numdevices=`cat /proc/interrupts | sed -n '2,$ p' | wc -l`;

for i in $(($numdevices-1)); do flag[$i]=0; done

echo "USE THE DEVICE FOR THE NEXT $sec SECONDS"
time=`date '+%s'`
while (( `date '+%s'` - time < $sec)); do
    idx=0;
    for el in `cat /proc/interrupts | sed -n '2,$ p' | awk '{print $2}'`; do
        if [ "x${temp[$idx]}" = "x" ]; then
            temp[$idx]=$el;
        else
            if (( $el - ${temp[$idx]} < $gap )); then
                #not moved
                temp[$idx]=$el;
                ((flag[$idx]--));
            else
                #catched!
                temp[$idx]=$el;
                ((flag[$idx]++));
            fi
        fi
        ((idx++))
    done
    sleep 0.8;
done

for i in $(($numdevices-1)); do temp[$i]=; done

echo -e "\nNOW DON T USE THE DEVICE FOR THE NEXT $(($sec+1)) SECONDS"
sleep 1;
time=`date '+%s'`;
while (( `date '+%s'` - time < $sec)); do
    idx=0;
    for el in `cat /proc/interrupts | sed -n '2,$ p' | awk '{print $2}'`; do
        if [ "x${temp[$idx]}" = "x" ]; then
            temp[$idx]=$el;
        else
            if (( $el - ${temp[$idx]} < $gap )); then
                #it's not moving!
                temp[$idx]=$el;
                ((flag[$idx]++));
            else
                #movement catched!
                temp[$idx]=$el;
                ((flag[$idx]--));
            fi
        fi
        ((idx++))
    done
    sleep 0.8;

done

winner=-1;
amount=3;
for n in `seq 0 $(($numdevices-1))`; do
    if [ "${flag[$n]}" -gt $amount ]; then
        winner=$n;
        amount=${flag[$n]};
    fi
done

if [ $winner -ne -1 ]; then
    echo "Most probably the device you were looking for is #$winner";
else
    echo "No suitable device found. Please retry"
fi

et le deuxième pour effectuer une action sur detection d'inactivité

#/bin/bash
# this script waits $delay seconds of user inactivity before exiting. Every movement of the keyboard or the mouse will make it restart counting.
# There should be no dangerous line of code that could harm your system but please consider it
# as a "Use the software at your own risk!" product.

#mouse and keyboard numbers (starting from 0)
device1=1;
device2=7;

#seconds of user inactivity that we want to wait
delay=10;
#the threshold above which we catch a "movement"
gap=10;
# YOU SHOULD NOT EDIT THE LINES BELOW THIS POINT
amount=
time=0;
((device1+=2))
((device2+=2))
while :; do
    idx=0;
    for el in `cat /proc/interrupts | sed -n -e "${device1}p;${device2}p" | awk '{print $2}'`; do
        if [ "x${amount[$idx]}" != "x" ] && (( $el - ${amount[$idx]}  > $gap )); then
            echo "Catched a movement. Restarting..."
            time=0;
        fi
        amount[$((idx++))]=$el;
    done   
    sleep 1
    (( $((++time)) > $delay )) && break;
done

echo "Spotted user inactivity for longer than $delay seconds!"

Dernière modification par thurston (Le 21/10/2010, à 19:28)

Hors ligne

#6 Le 21/10/2010, à 19:36

chopinhauer

Re : [RESOLU] Detection période inactivité souris pour script bash

Le périphérique de ta souris est celui qui engendre de données quand la souris bouge smile
Normalement /dev/input/mice envoie les données des toutes les souris, mais tu peux le vérifier avec :

sudo cat /dev/input/mice

Par contre les dates d'accès des fichiers de périphériques ne change jamais depuis la création du fichier.

Effectivement tu peux utiliser quelque chose comme xautolock pour surveiller l'inactivité du système.

Pour ce qui concerne who il montre seulement l'activité des terminaux.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#7 Le 21/10/2010, à 20:31

thurston

Re : [RESOLU] Detection période inactivité souris pour script bash

Bonjour chopinhauer

Oui tu as parfaitement raison.
C'est une piste également.
Merci pour le coup de main.
A+
Thurston

Hors ligne