¿Forma de medir el uso de la computadora a través del protector de pantalla activo / no activo?

15

Estoy buscando una manera simple de determinar la cantidad aproximada de tiempo por día que paso en una computadora. Esta puede ser una tarea difícil si intenta monitorear procesos, pulsaciones de teclas, clics del mouse y similares, ya que uno puede hacer cualquier cosa, desde pensar en un problema de codificación, leer un artículo web, hablar por teléfono o salir caminando. perro. La computadora no puede leer mi mente. Desde que dejo las computadoras encendidas 24/7, los inicios de sesión de monitoreo no funcionarán.

Llegué a la idea de registrar cuánto tiempo pasa la computadora en modo de protector de pantalla. Mi error no sería mayor que el producto del tiempo de inactividad para el protector de pantalla con la cantidad de veces que entra en modo de protector de pantalla. Restar esto de 24 horas me daría una estimación que sería razonable para mis propósitos.

El problema es: no sé cómo iniciar sesión cuando el protector de pantalla se enciende y apaga. Estoy ejecutando Ubuntu 10.10 en este momento en la mayoría de las máquinas, a punto de comenzar a actualizar a 11.04 en algunas de ellas.

¿Algunas ideas?

[editar] Después de buscar más en Google, golpeé el monitor dbus que parecía funcionar, pero le falta un ingrediente importante. Aquí está el script que estoy ejecutando que inicia el monitor como un demonio:

#!/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

Aquí está la salida que produce después de bloquear y desbloquear la pantalla un par de veces:

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

La segunda columna es obviamente unix UTC en segundos. ¡El ingrediente que falta es que no identifica si el protector de pantalla está activado o desactivado! Supongo que podría suponer que cambian desde el momento en que ocurre NameAcquired, pero me inquieta que pueda haber un evento extra o perdido que no puedo anticipar, lo que desestabilizaría todo.

Muy obligado por las ideas.

jkcunningham

jkcunningham
fuente
¿Son una opción las herramientas de gestión del tiempo como Hamster?
Nathan Osman
Lo acabo de instalar. No está claro cómo manejará el tiempo. Todavía no ingreso específicamente a las tareas, pero parece interesante.
jkcunningham
Lo he tenido encendido durante media hora más o menos y parece que requiere que se inicie cada vez. Eso es un inconveniente. No estoy tratando de registrar un tiempo en particular para, por ejemplo, propósitos de carga, solo tiempo dedicado a la computadora. Y si me olvido de encenderlo, ese tiempo no se tendrá en cuenta. Aunque todavía estoy jugando con eso.
jkcunningham
1
Esta es una muy buena pregunta con respecto a la medición del tiempo que pasa en la PC. Muy buena idea sobre el protector de pantalla.
Luis Alvarado
Mira esto en github github.com/nitesh-/hoursboard . Esto podría responder a su pregunta
Nitesh morajkar

Respuestas:

4

Me gustaría agradecer y contribuir con un script simple y sin formato (puede mejorarse), ponerlo en aplicaciones de inicio con:

xterm -e logSessionLock.sh

también está preparado el bloqueo / apagón del sistema. No se ha probado de forma exhaustiva ... pero funciona muy bien hasta ahora. creará 2 archivos, uno en $ HOME (el registro) y otro en / tmp (la solución alternativa de bloqueo del 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

el registro es así:

 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 de acuario
fuente
3

El paquete " Workrave " no solo rastrea si está usando su computadora y lo ayuda a tomar descansos durante el día, sino que también proporciona un buen conjunto de estadísticas, tanto en bruto (en un archivo de texto) como a través de una GUI ( Daily usage: 5:41:00 for Jul 21). Las estadísticas también incluyen cosas como minutos de uso del mouse, distancia de movimiento del mouse, pulsaciones de teclas, etc.

Instálelo desde los repositorios oficiales, agréguelo a su barra de menú, haga clic derecho y elija "estadísticas". Obtendrá un calendario para elegir el día que desea conocer. O mira los datos en ~ / .workrave / historystats

nealmcb
fuente
1
Esto parece una solución muy viable. Me gustaría encontrar una manera de desactivar los recordatorios de "microbreak" que pueden ser bastante molestos, pero de lo contrario parece acumular justo lo que estoy buscando. ¡Gracias!
jkcunningham
1
@jkcunningham Es fácil habilitar o deshabilitar los microbreaks, descansos o límites diarios desde el cuadro de diálogo de clic derecho / Preferencias. Aunque, por supuesto, es bueno para los ojos, las muñecas, los brazos, la espalda, etc., tomar descansos regulares, y workrave hace que sea fácil (incluso divertido) hacerlo, al mismo tiempo que es fácil posponer u omitir los descansos ocasionales si estás justo en el medio de algo.
nealmcb
2

Si elimina el --perfil, obtendrá un formato con marcas de tiempo que faltan, pero tiene si el protector de pantalla está activo o no.

$ 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

He usado una modificación de este script PHP para activar o desactivar cosas basadas en mi protector de pantalla

#!/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);
?>

La otra opción es usar gnome-screensaver-command --query. Usando crontab, dejo que Bitcoin use los 4 núcleos cuando el protector de pantalla está activo, pero solo obtiene 1 núcleo cuando estoy usando mi computadora.

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: sin configurar DISPLAY, gnome-screensaver-command no podrá encontrar la pantalla cuando se ejecute desde cron. Esto debe ejecutarse cuando el mismo usuario inició sesión.

2>&1: Esto dirige los errores a la salida estándar, que es capturada por ...

| grep -q 'is active';: -q hace que el grep sea silencioso, no genera nada. Pero el comando devuelve un éxito o un error que usa if.

Me doy cuenta de que ninguno de estos es una solución completa, pero espero que sean suficientes para comenzar.

Asa Ayers
fuente
2

Este es un guión más completo. Puede activarlo desde cron cada minuto y si el protector de pantalla está activo, registrará cuánto tiempo ha estado activo. Una vez que se desactive, tomará la última medida y la agregará a ~ / Screensaver.log. Si lo ejecuta desde cron, podría ser inexacto hasta 59 segundos cada vez que el protector de pantalla se desactive.

#!/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
fuente
Me gusta este enfoque. Puede haber un problema de caso de esquina si una máquina se cae mientras está en modo de protector de pantalla dejando un tiempo de espera / tmp / salvapantallas para registrar. Para mis propósitos, esto lo solucionaría: #! / Bin / bash ## 4 estados: ## * funcionando ## * no funciona, pero el protector de pantalla aún no está activo ## * protector de pantalla activo ## * falla de energía de la computadora o apagado # # Quiero registrar los dos primeros estados export DISPLAY = ': 0' SS_LAG = 10 if gnome-screensaver-command -q 2> & 1 | grep -q 'está inactivo'; luego DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham
De acuerdo, eso no funcionó bien: 5 minutos como máximo para las ediciones. Esta vez obtendré el código marcado: [código] #! / Bin / bash # 4 estados: # * trabajando # * inactivo, protector de pantalla inactivo # * protector de pantalla activo # * computadora apagada # Quiero registrar los dos primeros y la configuración de retraso del protector de pantalla export DISPLAY = ': 0' SS_LAG = 10 if gnome-screensaver-command -q 2> & 1 | grep -q 'está inactivo'; entonces DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Doy: ¿cómo se crea un bloque de código en un comentario? 4 espacios no funcionan.
jkcunningham
-1

Uso el uptimecomando, pero no da el tiempo activo / inactivo del sistema. uptime ofrece una visualización de una línea de la siguiente información. La hora actual, cuánto tiempo ha estado funcionando el sistema, cuántos usuarios están actualmente conectados y los promedios de carga del sistema durante los últimos 1, 5 y 15 minutos.

Chethan S.
fuente
Mi tiempo de actividad actual es de 81 días 23 horas 25 minutos. Te aseguro que no he estado sentado frente a una computadora tanto tiempo. Gracias, pero eso no funcionará. Estoy buscando una manera de determinar, aproximadamente, cuánto tiempo me siento frente a las computadoras a diario. Es por eso que estoy viendo los tiempos de activación / inactividad del protector de pantalla.
jkcunningham
Eso es bueno. Sí, como mencioné, no le dará el tiempo activo / inactivo del sistema y no sé cómo calcularlo a partir de los tiempos activos / inactivos del protector de pantalla.
Chethan S.