Maneira de medir o uso do computador através do protetor de tela ativo / não ativo?

15

Estou procurando uma maneira simples de determinar a quantidade aproximada de tempo por dia que gasto em um computador. Isso pode ser uma tarefa difícil se você tentar monitorar processos, pressionamentos de tecla, cliques do mouse e similares, porque pode-se fazer qualquer coisa, desde pensar em um problema de codificação, ler um artigo da Web, falar ao telefone ou sair andando pela Internet. cachorro. O computador não consegue ler minha mente. Como deixo os computadores 24 horas por dia, 7 dias por semana, os logins de monitoramento não funcionarão.

Eu tive a idéia de registrar quanto tempo o computador gasta no modo de proteção de tela. Meu erro não seria maior que o produto do tempo ocioso para o protetor de tela com o número de vezes que ele entra no modo de protetor de tela. Subtrair isso de 24 horas me daria uma estimativa razoável para meus propósitos.

O problema é: não sei como fazer logon quando o protetor de tela é ligado e desligado. Estou executando o Ubuntu 10.10 no momento na maioria das máquinas, prestes a começar a atualizar para o 11.04 em algumas delas.

Alguma ideia?

[edit] Depois de mais pesquisas, encontrei o dbus-monitor que parecia funcionar, mas está faltando um ingrediente importante. Aqui está o script que estou executando, que inicia o monitor como um daemon:

#!/bin/bash
RUNNING=`ps -A | grep "dbus-monitor"`
if [ ! $RUNNING  ]; then
    echo "(Re)starting dbus-monitor daemon"
    nohup dbus-monitor "--profile" "type='signal',interface='org.gnome.ScreenSaver'" >> ${HOME}/sc.log &
fi

Aqui está a saída que ela produz após bloquear e desbloquear a tela algumas vezes:

sig     1304860712      153829  2       /org/freedesktop/DBus   org.freedesktop.DBus    NameAcquired
sig     1304860717      318732  462     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged
sig     1304860725      547928  463     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged
sig     1304861018      17      464     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged
sig     1304862919      403523  466     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged

A segunda coluna é obviamente unix UTC em segundos. O ingrediente que falta é que ele não identifica se o protetor de tela está ativado ou desativado! Suponho que posso presumir que eles alternam a partir do momento em que NameAcquired acontece, mas me deixa desconfortável que possa haver um evento ausente ou extra que não posso prever que jogaria tudo fora de sincronia.

Muito obrigado por idéias.

jkcunningham

jkcunningham
fonte
As ferramentas de gerenciamento de tempo como o Hamster são uma opção?
Nathan Osman
Acabei de instalar. Ainda não está claro como ele irá lidar com o tempo. Ainda não ligo especificamente às tarefas, mas parece interessante.
Jkcunningham
Eu já o uso há meia hora e parece que exige que ele seja iniciado a cada vez. Isso é uma desvantagem. Não estou tentando marcar um horário específico para, digamos, fins de cobrança, apenas o tempo gasto no computador. E se eu esquecer de ativá-lo, o tempo não será contabilizado. Ainda estou brincando com isso.
Jkcunningham
1
Essa é uma pergunta muito boa em relação à medição do tempo gasto no PC. Ótima idéia sobre o protetor de tela.
22612 Luis Alvarado
Verifique isso no github github.com/nitesh-/hoursboard . Isso pode responder à sua pergunta
Nitesh morajkar

Respostas:

4

Gostaria de agradecer e contribuir de volta com um script simples e bruto (pode ser aprimorado), coloque-o em aplicativos de inicialização com:

xterm -e logSessionLock.sh

também é preparado um travamento / apagão do sistema. Não foi testado com muita força ... mas está funcionando muito bem até agora. ele criará 2 arquivos, um em $ HOME (o log) e outro em / tmp (a solução alternativa de falha do sistema)

logSessionLock.sh

#!/bin/bash

logFile="."`basename $0`".log"

function FUNClog {
  strTime=`gnome-screensaver-command --time`
  strDate=`date +"%Y%m%d-%H%M%S"`
  strLog="$strDate ($1) $strTime"
}

function FUNCwriteLog {
  echo $strLog >>$HOME/$logFile
  echo $strLog
}

active=false
firstTime=true

# restores last log entry in case of a system crash
strLog=`cat "/tmp/$logFile.tmp"`
FUNCwriteLog
echo "" >"/tmp/$logFile.tmp"
if [[ -n "$strLog" ]]; then #if has something, it was active when the system crashed
  active=true
fi

while true; do 
  if gnome-screensaver-command --query |grep -q "The screensaver is active"; then
    if ! $active; then
      # restore the saved tmp log
      strLog=`cat "/tmp/$logFile.tmp"`
      FUNCwriteLog

      # update log (can be off when this line is reached? once it seem to happen...)
      FUNClog BEGIN
      FUNCwriteLog #logs the begin time

      active=true
    else
      FUNClog ON #stores the ammount of time the screensaver has been ON
      echo $strLog >"/tmp/$logFile.tmp"
    fi
  else
    if $active; then
      FUNCwriteLog #saves the ammount of time the screensaver has been ON

      FUNClog OFF
      FUNCwriteLog
      echo "" >"/tmp/$logFile.tmp"

      active=false
    fi
  fi 

  sleep 1
done

o log é assim:

 20120214-191528 (BEGIN) The screensaver has been active for 0 seconds.
 20120214-193602 (ON) The screensaver has been active for 1234 seconds.
 20120214-193603 (OFF) The screensaver is not currently active.
Poder do Aquário
fonte
3

O pacote " Workrave " não apenas rastreia se você está usando o computador e ajuda a fazer pausas durante o dia, mas também fornece um bom conjunto de estatísticas, tanto brutas (em um arquivo de texto) quanto por meio de uma GUI ( Daily usage: 5:41:00 for Jul 21). As estatísticas também incluem itens como minutos de uso do mouse, distância de movimento do mouse, pressionamentos de teclas etc.

Instale-o nos repositórios oficiais, adicione-o à sua barra de menus, clique com o botão direito do mouse e escolha "estatísticas". Você receberá um calendário para escolher o dia que deseja conhecer. Ou veja os dados em ~ / .workrave / historystats

nealmcb
fonte
1
Parece uma solução muito viável. Gostaria de encontrar uma maneira de desativar os lembretes "microbreak", que podem ser bastante irritantes, mas, caso contrário, parece acumular exatamente o que estou procurando. Obrigado!
Jkcunningham
1
@jkcunningham É fácil ativar ou desativar as microbreaks, pausas para descanso ou limite diário a partir do botão direito do mouse / caixa de diálogo Preferências. Embora, é claro, seja bom para seus olhos, pulsos, braços, costas etc. fazer pausas regulares, e o trabalho de trabalho facilita (até mesmo divertido) fazer isso, além de adiar ou pular a pausa ocasional se você está bem no meio de alguma coisa.
Nealmcb
2

Se você remover o perfil -, obterá um formato com falta de registro de data e hora, mas ele possui se o protetor de tela está ativo ou não.

$ dbus-monitor "type='signal',interface='org.gnome.ScreenSaver'
...
signal sender=:1.46 -> dest=(null destination) serial=1881 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true

Eu usei uma modificação desse script PHP para ativar ou desativar as coisas com base no meu protetor de tela

#!/usr/bin/php
<?php
$handle = popen("dbus-monitor 'path=/org/gnome/ScreenSaver, member=ActiveChanged' 2>&1", 'r');
echo "'$handle'; " . gettype($handle) . "\n";
while (!feof($handle)) {
    $read = fgets($handle);
    if(preg_match("/^\s+boolean (\w+)/", $read, $matches))
    {
                $active = ($matches[1] == 'true');
                // do something here
    }
}
pclose($handle);
?>

A outra opção é usar gnome-screensaver-command --query. Usando o crontab, deixo que o bitcoin use todos os 4 núcleos quando o protetor de tela está ativo, mas só recebe 1 núcleo quando estou usando o meu computador.

DISPLAY=":0.0"
* * * * * if gnome-screensaver-command --query 2>&1 | grep -q 'is active'; then bitcoind setgenerate true 4; else bitcoind setgenerate true 1; fi

DISPLAY: sem definir o comando DISPLAY, o gnome-screensaver-command não conseguirá encontrar a tela quando executar a partir do cron. Isso deve ser executado como o mesmo usuário conectado.

2>&1: Isso direciona quaisquer erros para a saída padrão, que é capturada por ...

| grep -q 'is active';: o -q deixa o grep silencioso, não produz nada. Mas o comando retorna um sucesso ou falha que é usado pelo if.

Sei que nenhuma delas é uma solução completa, mas espero que seja suficiente para você começar.

Asa Ayers
fonte
2

Este é um script mais completo. Você pode ativá-lo do cron a cada minuto e, se o protetor de tela estiver ativo, ele registrará quanto tempo está ativo. Uma vez desativado, ele fará a última medição e a adicionará ao ~ / Screensaver.log. Se você executá-lo a partir do cron, pode ser impreciso por até 59 segundos cada vez que o protetor de tela é desativado.

#!/bin/bash
export DISPLAY=':0'
if gnome-screensaver-command -q 2>&1 | grep -q 'is active'; then
    # this will overwrite the file each time.
    gnome-screensaver-command --time > /tmp/ScreensaverActiveTime
# if the screensaver is not active and we have the file from last time this ran ...
elif [ -e /tmp/ScreensaverActiveTime ]; then
    # append it to our log and ...
    cat /tmp/ScreensaverActiveTime >> ~/Screensaver.log
    # remove the file. It will be recreated once the screensaver activates again.
    rm /tmp/ScreensaverActiveTime
fi
Asa Ayers
fonte
Eu gosto dessa abordagem. Pode haver um problema de esquina se uma máquina cair enquanto estiver no modo de proteção de tela, deixando um tempo de espera / tmp / screensaveractive pendente para ser registrado. Para meus propósitos, isso contornaria: #! / Bin / bash ## 4 afirma: ## * working ## * não está funcionando, mas o protetor de tela ainda não está ativo ## * screensaver ativo ## * falha de energia do computador ou desativado # # Quero registrar os dois primeiros estados exportando DISPLAY = ': 0' SS_LAG = 10 se gnome-screensaver-command -q 2> & 1 | grep -q 'está inativo'; então DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham
Ok, isso não funcionou bem - 5 minutos no máximo para edições. Dessa vez, mostrarei a marcação do código: [code] #! / Bin / bash # 4 afirma: # * trabalhando # * ocioso, protetor de tela inativo # * protetor de tela ativo # * computador desligado # Quero fazer logon nos dois primeiros e o atraso do protetor de tela definindo exportação export DISPLAY = ': 0' SS_LAG = 10 se gnome-screensaver-command -q 2> & 1 | grep -q 'está inativo'; então DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Eu dou: como você cria um bloco de código em um comentário? 4 espaços não funcionam.
Jkcunningham
-1

Eu uso o uptimecomando, mas ele não fornece o tempo ativo / inativo do sistema. o tempo de atividade fornece uma linha de exibição das seguintes informações. O horário atual, há quanto tempo o sistema está em execução, quantos usuários estão conectados no momento e a média de carga do sistema nos últimos 1, 5 e 15 minutos.

Chethan S.
fonte
Meu tempo de atividade atual é de 81 dias 23 horas 25 minutos. Garanto que não estou sentado na frente de um computador há tanto tempo. Obrigado, mas isso não vai funcionar. Estou procurando uma maneira de determinar - aproximadamente - quanto tempo eu fico sentado na frente dos computadores diariamente. É por isso que estou observando os tempos ativos / inativos do protetor de tela.
Jkcunningham #
Isso é bom. Sim, como mencionei, não fornecerá o tempo ativo / inativo do sistema e não conheço uma maneira de calculá-lo a partir dos tempos ativos / inativos do protetor de tela.
Chethan S.