Como determinar por que o xprintidle continua “redefinindo” a cada 30 segundos

3

Estou tentando usar xprintidle para obter o tempo ocioso do X (Unity) para que eu possa colocar meu monitor para dormir depois de um certo tempo. (Eu tenho que usar xset dpms force off porque meu monitor não voltará ao usar configurações normais de energia / suspensão do Ubuntu. Problema diferente ...) Mas xprintidle será redefinido para 0 ms a cada 30 segundos se eu estiver usando minha máquina ou não. ou seja, se estou movendo o mouse / clicando / rolando ou digitando no teclado. Eu suspeito que algo esteja causando o Unity a pensar que não estou ocioso, mas não consigo descobrir o que isso poderia ser.

Aqui está uma saída mostrando o problema:

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% 

Observe como o tempo ocioso é redefinido na marca de 12 segundos e 42 segundos. (Ok, então eu tenho a resposta final, mas não a esta pergunta!)

Eu também tentei executar w ( O que o tempo ocioso de saída do comando "w" diz? ), mas infelizmente mostra "? xdm?" por tempo ocioso X.

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

[Editar] Eu também tentei obter o tempo ocioso diretamente da extensão XScreenSaver como feito aqui em Andrey Sidorov resposta, mas eu recebo o mesmo timer de reset a cada 30 segundos.

A documentação do x.org apenas menciona

  

O campo ocioso especifica o número de milissegundos desde a última entrada recebida do usuário em qualquer um dos dispositivos de entrada.

    
por jdk1.0 19.10.2015 / 22:47

1 resposta

4

Olhando a fonte para xprintidle (veja abaixo como eu fiz isso), vemos:

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.

Então, suponho que mover o mouse redefiniria o tempo limite. Isso faz sentido, uma vez que o tempo limite em questão está levando à supressão / travamento da tela.

Olhando mais na fonte, vemos as funções que xprintidle usa. ( XScreenSaverAllocInfo() , DPMSQueryExtension() , etc). Ler a página man para essas funções fornecerá mais detalhes ( man XScreenSaverAllocInfo ).

Como consegui ver a fonte:

# 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
    
por waltinator 23.10.2015 / 17:36