Modo di misurare l'utilizzo del computer tramite screensaver tempo attivo / non attivo?


15

Sto cercando un modo semplice per determinare la quantità approssimativa di tempo al giorno che passo su un computer. Questo può essere un compito difficile se si tenta di monitorare processi, pressioni di tasti, clic del mouse e simili, perché si può fare qualsiasi cosa dal pensare a un problema di codifica, leggere un articolo Web, parlare al telefono o andare a spasso cane. Il computer non può leggermi nella mente. Da quando lascio i computer su 24/7 monitoraggio accessi non funzionerà.

Mi è venuta l'idea di registrare quanto tempo il computer trascorre in modalità screensaver. Il mio errore non sarebbe quindi maggiore del prodotto del tempo di inattività del salvaschermo con il numero di volte che passa in modalità salvaschermo. Sottraendo questo da 24 ore mi darebbe una stima che sarebbe ragionevole per i miei scopi.

Il problema è: non so come accedere quando lo screensaver si accende e si spegne. Attualmente eseguo Ubuntu 10.10 sulla maggior parte delle macchine, sto per iniziare l'aggiornamento a 11.04 su alcune di esse.

Qualche idea?

[modifica] Dopo aver cercato su Google ho colpito il monitor Dbus che sembrava funzionare, ma manca un ingrediente importante. Ecco lo script che sto eseguendo che avvia il monitor come demone:

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

Ecco l'output che produce dopo aver bloccato e sbloccato lo schermo un paio di volte:

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 seconda colonna è ovviamente unix UTC in pochi secondi. L'ingrediente mancante è che non identifica se lo screensaver è acceso o spento! Suppongo che potrei supporre che si attivino dal momento in cui NameAcquired accade, ma mi fa venire la nausea che potrebbe esserci un evento mancante o extra che non posso prevedere, il che getterebbe tutto fuori sincrono.

Molto obbligato per le idee.

jkcunningham


Strumenti di gestione del tempo come Hamster sono un'opzione?
Nathan Osman,

L'ho appena installato. Non è chiaro come gestirà il tempo che non accedo in modo specifico alle attività, ma sembra interessante.
jkcunningham,

L'ho acceso per circa mezz'ora e sembra che richieda che venga avviato ogni volta. Questo è uno svantaggio. Non sto cercando di dedicare un tempo particolare per, ad esempio, ai fini della ricarica, ma solo del tempo trascorso al computer. E se dimentico di accenderlo, quell'ora non verrà presa in considerazione. Ci sto ancora giocando, comunque.
jkcunningham,

1
Questa è un'ottima domanda per quanto riguarda la misurazione del tempo trascorso sul PC. Ottima idea sullo screensaver.
Luis Alvarado,

Dai un'occhiata a github github.com/nitesh-/hoursboard . Questo potrebbe rispondere alla tua domanda
Nitesh morajkar,

Risposte:


4

Vorrei ringraziare e contribuire con un semplice script non elaborato (può essere migliorato), inserirlo nelle applicazioni di avvio con:

xterm -e logSessionLock.sh

è predisposto anche per crash di sistema / blackout. Non è pesantemente testato ... ma funziona benissimo fino ad ora. creerà 2 file, uno in $ HOME (il registro) un altro in / tmp (la soluzione alternativa al crash di 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

il registro è così:

 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.

3

Il pacchetto " Workrave " non solo traccia se stai usando il tuo computer e ti aiuta a fare delle pause durante il giorno, ma fornisce anche un bel set di statistiche, sia raw (in un file di testo) che tramite una GUI (Daily usage: 5:41:00 for Jul 21 ). Le statistiche includono anche cose come minuti di utilizzo del mouse, distanza di movimento del mouse, sequenze di tasti, ecc.

Installalo dai repository ufficiali, aggiungilo alla barra dei menu, fai clic con il tasto destro e scegli "statistiche". Avrai un calendario per scegliere il giorno che vuoi sapere. Oppure guarda i dati in ~ / .workrave / historystats


1
Questa sembra una soluzione molto praticabile. Vorrei trovare un modo per disabilitare i promemoria "microbreak" che possono essere piuttosto fastidiosi, ma per il resto sembra accumulare proprio quello che sto cercando. Grazie!
jkcunningham,

1
@jkcunningham È facile abilitare o disabilitare i microinterruzioni, le pause di riposo o il limite giornaliero dalla finestra di dialogo del pulsante destro del mouse / Preferenze. Anche se, naturalmente, è bene per gli occhi, i polsi, le braccia, la schiena ecc. Fare effettivamente delle pause regolari, e il workrave rende facile (anche divertente) farlo, facilitando anche il rinvio o il salto della pausa occasionale se sei proprio nel mezzo di qualcosa.
nealmcb,

2

Se rimuovi il file --profile otterrai un formato mancante di timestamp, ma ha anche se lo screensaver è attivo o meno.

$ 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

Ho usato una modifica di questo script PHP per attivare o disattivare le cose in base al mio salvaschermo

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

L'altra opzione è usare gnome-screensaver-command --query. Usando crontab lascio che bitcoin usi tutti e 4 i core quando lo screensaver è attivo, ma ottiene solo 1 core quando sto usando il mio computer.

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: senza impostare DISPLAY il comando gnome-screensaver non sarà in grado di trovare lo schermo quando eseguito da cron. Questo deve essere eseguito come lo stesso utente che ha effettuato l'accesso.

2>&1: Questo indirizza eventuali errori nell'output standard, che viene acquisito da ...

| grep -q 'is active';: -q rende silenzioso grep, non produce nulla. Ma il comando restituisce un esito positivo o negativo che viene utilizzato da if.

Mi rendo conto che nessuna di queste è una soluzione completa, ma spero che siano sufficienti per iniziare.


2

Questo è uno script più completo. Puoi attivarlo da cron ogni minuto e se lo screensaver è attivo, registrerà per quanto tempo è stato attivo. Una volta disattivato, prenderà l'ultima misurazione e la aggiungerà a ~ / Screensaver.log. Se lo esegui da cron, potrebbe non essere preciso per un massimo di 59 secondi ogni volta che lo screensaver si disattiva.

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

Mi piace questo approccio. Potrebbe esserci un problema di caso angolare se una macchina si spegne mentre è in modalità screensaver lasciando un tempo di sospensione / tmp / screensaver per essere registrato. Per i miei scopi questo lo aggirerebbe: #! / Bin / bash ## 4 afferma: ## * working ## * non funziona, ma screensaver non ancora attivo ## * screensaver attivo ## * interruzione di corrente del computer o spento # # Voglio registrare i primi due stati export DISPLAY = ': 0' SS_LAG = 10 se gnome-screensaver-command -q 2> & 1 | grep -q 'è inattivo'; allora DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham

Ok, questo non ha funzionato bene - massimo 5 minuti per le modifiche. Questa volta visualizzerò il markdown del codice: [code] #! / Bin / bash # 4 afferma: # * working # * inattivo, screensaver inattivo # * screensaver attivo # * computer spento # Voglio registrare i primi due e l'impostazione del ritardo dello screensaver esporta DISPLAY = ': 0' SS_LAG = 10 se gnome-screensaver-command -q 2> & 1 | grep -q 'è inattivo'; allora DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] I do: come si crea un blocco di codice in un commento? 4 spazi non funzionano.
jkcunningham,

-1

Uso il uptimecomando, ma non fornisce il tempo attivo / inattivo del sistema. il tempo di attività fornisce una visualizzazione di una riga delle seguenti informazioni. L'ora corrente, la durata del sistema, il numero di utenti attualmente connessi e il carico medio del sistema negli ultimi 1, 5 e 15 minuti.


Il mio tempo di attività attuale è di 81 giorni, 23 ore e 25 minuti. Ti assicuro che non sono stato seduto davanti a un computer così a lungo. Grazie, ma non funzionerà. Sto cercando un modo per determinare - all'incirca - per quanto tempo mi siedo davanti al computer su base giornaliera. Ecco perché sto guardando i tempi attivi / inattivi dello screensaver.
jkcunningham,

Quello è buono. Sì, come ho già detto, non ti darà il tempo attivo / inattivo del sistema e non conosco un modo per calcolarlo dai tempi attivi / inattivi dello screensaver.
Chethan S.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.