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

14

Estou procurando uma maneira simples de determinar a quantidade 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 coisas do tipo, porque pode-se fazer qualquer coisa, desde pensar em um problema de codificação, ler um artigo na Web, falar ao telefone ou sair andando. cão. O computador não consegue ler minha mente. Como deixo os computadores em log-in de monitoramento 24 horas por dia, eles não funcionam.

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 do que o produto do tempo ocioso para o protetor de tela com o número de vezes que ele entra no modo de proteção de tela. Subtrair isso de 24 horas me daria uma estimativa que seria razoável para meus propósitos.

O problema é: eu não sei como logar quando o protetor de tela liga e desliga. Eu estou executando o Ubuntu 10.10 no momento na maioria das máquinas, prestes a iniciar a atualização para o 11.04 em alguns deles.

Alguma idéia?

[edit] Depois de mais pesquisas eu encontrei o monitor dbus 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 produz depois de 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! Eu suponho que eu poderia assumir que eles mudam desde o momento em que o NameAcquired acontece, mas me deixa nauseada que possa haver um evento extra ou ausente que eu não posso antecipar e que jogaria tudo fora de sincronia.

Muito obrigado por ideias.

jkcunningham

    
por jkcunningham 08.05.2011 / 14:36

5 respostas

4

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

xterm -e logSessionLock.sh

também é o travamento do sistema / blackout preparado. Não é muito testado ... mas está funcionando 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.
    
por Aquarius Power 14.02.2012 / 22:48
3

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

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

    
por nealmcb 22.07.2011 / 17:55
2

Se você remover o --profile, obterá um formato de data e hora ausentes, mas ele terá ou não o protetor de tela ativo.

$ 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 deste script PHP para ativar ou desativar 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 eu deixo o bitcoin usar todos os 4 núcleos quando o protetor de tela está ativo, mas ele 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

EXIBIÇÃO: Sem definir DISPLAY gnome-screensaver-command não poderá encontrar a tela quando executado a partir do cron. Isso deve ser executado quando o mesmo usuário estiver conectado.

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

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

Eu percebo que nada disso é uma solução completa, mas espero que seja o suficiente para você começar.

    
por Asa Ayers 15.06.2011 / 08:13
2

Este é um script mais completo. Você pode acioná-lo do cron a cada minuto e, se o protetor de tela estiver ativo, ele registrará por quanto tempo ele está ativo. Uma vez desativada, será feita a última medição e adicionada a ~ / Screensaver.log. Se você executá-lo a partir do cron, pode ser impreciso por até 59 segundos cada vez que o protetor de tela for 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
    
por Asa Ayers 15.06.2011 / 08:29
-1

Eu uso o comando uptime , mas ele não fornece o tempo ativo / inativo do sistema. O tempo de atividade fornece uma exibição de uma linha das seguintes informações. A hora atual, há quanto tempo o sistema está em execução, quantos usuários estão conectados atualmente e as médias de carga do sistema nos últimos 1, 5 e 15 minutos.

    
por Chethan S. 08.05.2011 / 17:22