web-dev-qa-db-fra.com

Comment déterminer pourquoi xprintidle continue à "réinitialiser" toutes les 30 secondes

J'essaie d'utiliser xprintidle pour obtenir le temps d'inactivité X (Unity) afin de pouvoir mettre mon moniteur en veille après un certain temps. (Je dois utiliser xset dpms force off parce que mon moniteur ne se rallume pas lors de l'utilisation de paramètres d'alimentation/de suspension Ubuntu normaux. Problème différent ...) Mais xprintidle revient à 0 ms toutes les 30 secondes, que je sois utiliser ma machine ou pas. c’est-à-dire si je déplace la souris/clique/défile ou tape sur le clavier. Je soupçonne que quelque chose fait penser à Unity que je ne suis pas inactif, mais je ne peux pas comprendre ce que cela pourrait être.

Voici une sortie montrant le problème:

x-pc-linux% while [[ $(xprintidle) -lt 60000 ]]; do
                echo "$(date +%T) $(xprintidle)" && sleep 1;
            done
13:24:47 12
13:24:48 917
13:24:49 1924
13:24:50 2933
13:24:51 3940
13:24:52 4946
13:24:53 5955
13:24:54 6963
13:24:55 7969
13:24:56 8976
13:24:57 9982
13:24:58 10990
.
. # snip
.
13:25:08 21061
13:25:09 22069
13:25:10 23078
13:25:11 24085
13:25:12 342
13:25:13 1350
13:25:14 2358
13:25:15 3364
13:25:16 4372
13:25:17 5380
13:25:18 6388
13:25:19 7395
13:25:20 8402
13:25:21 9409
13:25:22 10417
.
. # snip
.
13:25:35 23511
13:25:36 24519
13:25:37 25525
13:25:38 26532
13:25:39 27540
13:25:40 28549
13:25:41 29556
13:25:42 551
13:25:43 1559
13:25:44 2566
^C% 

Remarquez comment le temps d'inactivité est réinitialisé à 12 secondes et à 42 secondes. (Ok, alors j'ai la réponse ultime, mais pas à cette question!)

J'ai aussi essayé de lancer w ( Qu'est-ce que la commande "w" indique en temps d'inactivité? ), mais malheureusement, il indique "? Xdm?" pour X temps d'inactivité.

x-pc-linux% w
 13:37:47 up 2 days,  3:28,  4 users,  load average: 1.76, 2.04, 2.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
***      :0       :0               Sat10   ?xdm?   4days  0.59s /sbin/upstart --user
***      pts/1    :0               Sat10    2:09m  0.39s  0.30s zsh
***      pts/4    :0               Sun14    0.00s  5:34   0.00s w
***      pts/12   192.168.1.144    11:20   20:11  13.41s 13.32s zsh

[Modifier] J'ai également essayé d'obtenir le temps d'inactivité directement à partir de l'extension XScreenSaver, comme cela a été fait ici dans la réponse de Andrey Sidorov, mais le même minuteur est réinitialisé toutes les 30 secondes.

Le documentation x.org mentionne seulement

Le champ inactif spécifie le nombre de millisecondes écoulées depuis la dernière entrée de l'utilisateur sur l'un des périphériques d'entrée.

3
jdk1.0

En regardant la source de xprintidle (voir ci-dessous comment j'ai fait cela), nous voyons:

This program prints the "idle time" of the user to stdout.  The "idle
time" is the number of milliseconds since input was received on any
input device.  If unsuccessful, the program prints a message to stderr
and exits with a non-zero exit code.

Donc, je suppose que déplacer la souris réinitialiserait le délai. Cela a du sens, car le délai en question conduit à l’effacement ou au verrouillage de l’écran.

En regardant plus loin dans le source, on voit les fonctions que xprintidle utilise. (XScreenSaverAllocInfo(), DPMSQueryExtension(), etc.). La lecture de la page man de ces fonctions vous donnera plus de détails (man XScreenSaverAllocInfo).

Comment j'ai la source à regarder:

# Includes several set-up-the-environment steps
mkdir ${HOME}/apt-src  
cd ${HOME}/apt-src
Sudo apt-get install apt-src
apt-src install xprintidle
cd xprintidle-0.2/
ls
less xprintidle.c
cd ..
apt-src remove xprintidle
5
waltinator