OK, o que você tentou? O que o google disse? Você já tentou descobrir como o protetor de tela detecta isso? Reserve um tempo para pesquisar antes de postar perguntas aqui e leia Como fazer uma boa pergunta .
terdon
Eu só encontrei um programa xautolock, mas não há exemplos
Respostas:
20
Eu uso um programa chamado xprintidlepara descobrir o tempo ocioso do X, que eu acho fortemente que usa a mesma fonte de dados que os protetores de tela. xprintidlerealmente não parece mais ter um upstream, mas o pacote Debian está vivo e bem.
É uma aplicação muito simples: retorna a quantidade de milissegundos desde a última interação do X:
(nota: devido ao sistema subjacente, ele fornecerá consistentemente um valor em ms ligeiramente inferior ao tempo ocioso "real").
Você pode usar isso para criar um script que execute uma determinada sequência após cinco minutos de tempo ocioso via, por exemplo:
#!/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
O deslocamento de 100 ms deve-se à peculiaridade observada anteriormente, que xprintidlesempre retornará um tempo um pouco menor que o tempo ocioso "real" quando executado dessa maneira. Ele funcionará sem esse deslocamento e será mais preciso até um décimo de segundo, mas disparará a xprintidleverificação freneticamente durante os últimos milissegundos antes do final do intervalo. Não é um porco da performance, mas acho isso deselegante.
Eu tenho usado uma abordagem semelhante em um script Perl (um plugin irssi) há algum tempo, mas o acima foi escrito e não foi realmente testado, exceto por algumas tentativas durante a gravação.
Tente executá-lo em um terminal no X. Eu recomendo definir o tempo limite para, por exemplo, 5000 ms para testes e adicionar set -xdiretamente abaixo #!/bin/shpara obter uma saída informativa e ver como funciona.
Uma vez que estes foram instalados, eu compilei o acima descrito assim:
$ gcc xidle.c -o xidle -lX11 -lXext -lXss
Você pode ver que é capaz de relatar o número de segundos que o X está detectando como tempo ocioso executando-o da seguinte maneira:
$ while[1];do./xidle ; sleep 2;done0.0050001.9480003.9540005.9590007.9650000.073000<--- moved the mouse here which resets it
0.035000
Usando esse executável, você pode montar um script que pode fazer algo assim, monitorando o tempo ocioso relatado por 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
O exemplo acima mostra still < 5até 5 segundos de tempo ocioso, ponto em que ele começa a dizer now > 5, o que significa que mais de 5 segundos se passaram.
NOTA: Você pode incorporar o seu notify-send 'a'no exemplo acima.
xautolock
, mas não há exemplosRespostas:
Eu uso um programa chamado
xprintidle
para descobrir o tempo ocioso do X, que eu acho fortemente que usa a mesma fonte de dados que os protetores de tela.xprintidle
realmente não parece mais ter um upstream, mas o pacote Debian está vivo e bem.É uma aplicação muito simples: retorna a quantidade de milissegundos desde a última interação do X:
(nota: devido ao sistema subjacente, ele fornecerá consistentemente um valor em ms ligeiramente inferior ao tempo ocioso "real").
Você pode usar isso para criar um script que execute uma determinada sequência após cinco minutos de tempo ocioso via, por exemplo:
O deslocamento de 100 ms deve-se à peculiaridade observada anteriormente, que
xprintidle
sempre retornará um tempo um pouco menor que o tempo ocioso "real" quando executado dessa maneira. Ele funcionará sem esse deslocamento e será mais preciso até um décimo de segundo, mas disparará axprintidle
verificação freneticamente durante os últimos milissegundos antes do final do intervalo. Não é um porco da performance, mas acho isso deselegante.Eu tenho usado uma abordagem semelhante em um script Perl (um plugin irssi) há algum tempo, mas o acima foi escrito e não foi realmente testado, exceto por algumas tentativas durante a gravação.
Tente executá-lo em um terminal no X. Eu recomendo definir o tempo limite para, por exemplo, 5000 ms para testes e adicionar
set -x
diretamente abaixo#!/bin/sh
para obter uma saída informativa e ver como funciona.fonte
Eu uso
xssstate
para esses fins. Está disponível nosuckless-tools
pacote no Debian ou Ubuntu , ou upstream .Então você pode usar o seguinte script de shell:
fonte
Aqui está um aplicativo C que eu achei que você pode compilar.
Ele precisa de algumas bibliotecas para construir. No meu sistema Fedora 19, eu precisava das seguintes bibliotecas:
Uma vez que estes foram instalados, eu compilei o acima descrito assim:
Você pode ver que é capaz de relatar o número de segundos que o X está detectando como tempo ocioso executando-o da seguinte maneira:
Usando esse executável, você pode montar um script que pode fazer algo assim, monitorando o tempo ocioso relatado por
xidle
.O exemplo acima mostra
still < 5
até 5 segundos de tempo ocioso, ponto em que ele começa a dizernow > 5
, o que significa que mais de 5 segundos se passaram.NOTA: Você pode incorporar o seu
notify-send 'a'
no exemplo acima.Referências
fonte
As portas bsd (coleção de pacotes) têm um programa que pode fazer isso:
http://man.openbsd.org/OpenBSD-current/man1/xidle.1
está disponível, por exemplo, aqui:
http://distcache.freebsd.org/local- distfiles / romance / xidle-26052015.tar.bz2
construir como:
observe que o programa-precisa conter o caminho completo para o binário, como é passado para execv ().
fonte