OK, qu'as-tu essayé? Qu'est-ce que Google a dit? Avez-vous tenté de savoir comment l'économiseur d'écran détecte cela? Veuillez prendre le temps de rechercher avant de poster des questions ici et de lire Comment poser une bonne question .
terdon
Je n'ai trouvé qu'un programme xautolockmais il n'y a pas d'exemples
Réponses:
20
J'utilise un programme appelé xprintidlepour connaître le temps d'inactivité X, qui, je suppose, utilise la même source de données que les économiseurs d'écran. xprintidlene semble plus vraiment avoir d'amont, mais le paquet Debian est bel et bien vivant.
C'est une application très simple: elle retourne le nombre de millisecondes depuis la dernière interaction X:
(Remarque: en raison du système sous-jacent, il donnera systématiquement une valeur en ms légèrement inférieure au temps d'inactivité "réel").
Vous pouvez l'utiliser pour créer un script qui exécute une certaine séquence après cinq minutes d'inactivité via par exemple:
#!/bin/sh# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))# Sequence to execute when timeout triggers.
trigger_cmd(){
echo "Triggered action $(date)"}
sleep_time=$IDLE_TIME
triggered=false
# ceil() instead of floor()while sleep $(((sleep_time+999)/1000));do
idle=$(xprintidle)if[ $idle -ge $IDLE_TIME ];thenif! $triggered;then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIME
fielse
triggered=false
# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))fidone
Le décalage de 100 ms est dû à la bizarrerie notée précédemment qui xprintidleretournera toujours un temps légèrement inférieur au temps d'inactivité "réel" lorsqu'il est exécuté comme ceci. Il fonctionnera sans ce décalage, et sera alors plus précis au dixième de seconde, mais il déclenchera le xprintidlecontrôle frénétiquement pendant les dernières millisecondes avant la fin d'un intervalle. Pas un porc de performance en aucune façon, mais je trouverais cela inélégant.
J'ai utilisé une approche similaire dans un script Perl (un plugin irssi) pendant un certain temps, mais ce qui précède vient d'être écrit et n'a pas vraiment été testé, à l'exception de quelques essais pendant l'écriture.
Essayez-le en l'exécutant dans un terminal au sein de X. Je recommande de définir le délai d'expiration à par exemple 5000 ms pour les tests, et en ajoutant set -xdirectement ci-dessous #!/bin/shpour obtenir une sortie informative pour voir comment cela fonctionne.
Une fois ceux-ci installés, j'ai compilé ce qui précède comme suit:
$ gcc xidle.c -o xidle -lX11 -lXext -lXss
Vous pouvez voir qu'il est capable de signaler le nombre de secondes que X détecte comme temps d'inactivité en l'exécutant comme suit:
$ while[1];do./xidle ; sleep 2;done0.0050001.9480003.9540005.9590007.9650000.073000<--- moved the mouse here which resets it
0.035000
En utilisant cet exécutable, vous pouvez créer un script qui peut faire quelque chose comme ça, en surveillant le temps d'inactivité signalé par xidle.
$ while[1];do idle=$(./xidle);[ $( echo "$idle > 5"| bc )-eq 0]&& echo "still < 5"|| echo "now > 5";
sleep 2;done
still <5
still <5
still <5
now >5
now >5
still <5
still <5
still <5
Ce qui précède montre still < 5jusqu'à ce que 5 secondes d'inactivité se soient écoulées, moment auquel il commence à dire now > 5, ce qui signifie que plus de 5 secondes se sont écoulées.
xautolock
mais il n'y a pas d'exemplesRéponses:
J'utilise un programme appelé
xprintidle
pour connaître le temps d'inactivité X, qui, je suppose, utilise la même source de données que les économiseurs d'écran.xprintidle
ne semble plus vraiment avoir d'amont, mais le paquet Debian est bel et bien vivant.C'est une application très simple: elle retourne le nombre de millisecondes depuis la dernière interaction X:
(Remarque: en raison du système sous-jacent, il donnera systématiquement une valeur en ms légèrement inférieure au temps d'inactivité "réel").
Vous pouvez l'utiliser pour créer un script qui exécute une certaine séquence après cinq minutes d'inactivité via par exemple:
Le décalage de 100 ms est dû à la bizarrerie notée précédemment qui
xprintidle
retournera toujours un temps légèrement inférieur au temps d'inactivité "réel" lorsqu'il est exécuté comme ceci. Il fonctionnera sans ce décalage, et sera alors plus précis au dixième de seconde, mais il déclenchera lexprintidle
contrôle frénétiquement pendant les dernières millisecondes avant la fin d'un intervalle. Pas un porc de performance en aucune façon, mais je trouverais cela inélégant.J'ai utilisé une approche similaire dans un script Perl (un plugin irssi) pendant un certain temps, mais ce qui précède vient d'être écrit et n'a pas vraiment été testé, à l'exception de quelques essais pendant l'écriture.
Essayez-le en l'exécutant dans un terminal au sein de X. Je recommande de définir le délai d'expiration à par exemple 5000 ms pour les tests, et en ajoutant
set -x
directement ci-dessous#!/bin/sh
pour obtenir une sortie informative pour voir comment cela fonctionne.la source
J'utilise
xssstate
à de telles fins. Il est disponible ensuckless-tools
package dans Debian ou Ubuntu , ou en amont .Ensuite, vous pouvez utiliser le script shell suivant:
la source
Voici une application C que j'ai trouvée que vous pouvez compiler.
Il a besoin de quelques bibliothèques pour se construire. Sur mon système Fedora 19, j'avais besoin des bibliothèques suivantes:
Une fois ceux-ci installés, j'ai compilé ce qui précède comme suit:
Vous pouvez voir qu'il est capable de signaler le nombre de secondes que X détecte comme temps d'inactivité en l'exécutant comme suit:
En utilisant cet exécutable, vous pouvez créer un script qui peut faire quelque chose comme ça, en surveillant le temps d'inactivité signalé par
xidle
.Ce qui précède montre
still < 5
jusqu'à ce que 5 secondes d'inactivité se soient écoulées, moment auquel il commence à direnow > 5
, ce qui signifie que plus de 5 secondes se sont écoulées.REMARQUE: vous pouvez intégrer votre
notify-send 'a'
dans l'exemple ci-dessus.Les références
la source
les ports bsd (collection de packages) ont un programme qui peut le faire:
http://man.openbsd.org/OpenBSD-current/man1/xidle.1
il est disponible par exemple ici:
http://distcache.freebsd.org/local- distfiles / novel / xidle-26052015.tar.bz2
construire comme:
notez que -program doit contenir le chemin complet du binaire, car il est passé à execv ().
la source