Möglichkeit zur Messung der Computernutzung über den Bildschirmschoner Aktiv / Nicht Aktiv Zeit?

15

Ich suche nach einer einfachen Methode, um die ungefähre Zeit zu bestimmen, die ich pro Tag an einem Computer verbringe. Dies kann eine schwierige Aufgabe sein, wenn Sie versuchen, Prozesse, Tastendrücke, Mausklicks und ähnliches zu überwachen, da Sie nicht nur über ein Codierungsproblem nachdenken, sondern auch einen Webartikel lesen, telefonieren oder mit dem Computer loslegen können Hund. Der Computer kann meine Gedanken nicht lesen. Da ich die Computer rund um die Uhr überwacht habe, funktionieren Anmeldungen nicht.

Ich bin auf die Idee gekommen, zu protokollieren, wie viel Zeit der Computer im Bildschirmschoner-Modus verbringt. Mein Fehler wäre dann nicht größer als das Produkt der Leerlaufzeit bis zum Bildschirmschoner mit der Häufigkeit, mit der er in den Bildschirmschoner-Modus wechselt. Wenn ich diesen Wert von 24 Stunden abziehe, erhalte ich eine Schätzung, die für meine Zwecke angemessen wäre.

Das Problem ist: Ich weiß nicht, wie ich mich anmelden soll, wenn der Bildschirmschoner ein- und ausgeschaltet wird. Momentan starte ich Ubuntu 10.10 auf den meisten Rechnern und werde auf einigen bald ein Upgrade auf 11.04 durchführen.

Irgendwelche Ideen?

[edit] Nachdem ich weiter gegoogelt habe, bin ich auf den Dbus-Monitor gestoßen, der so aussah, als würde er funktionieren, aber eine wichtige Zutat fehlt. Hier ist das Skript, das ich ausführe und das den Monitor als Daemon startet:

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

Hier ist die Ausgabe, die nach mehrmaligem Sperren und Entsperren des Bildschirms erzeugt wird:

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

Die zweite Spalte ist offensichtlich Unix UTC in Sekunden. Die fehlende Zutat ist, dass nicht festgestellt werden kann, ob der Bildschirmschoner aktiviert oder deaktiviert ist! Ich nehme an, ich könnte annehmen, dass sie ab dem Zeitpunkt, an dem NameAcquired auftritt, umschalten, aber es macht mich nervös, dass ein fehlendes oder zusätzliches Ereignis, das ich nicht vorhersagen kann, alles aus der Synchronität bringen würde.

Sehr verpflichtet für Ideen.

jkcunningham

jkcunningham
quelle
Sind Zeitmanagement-Tools wie Hamster eine Option?
Nathan Osman
Ich habe es gerade installiert. Es ist nicht klar, wie es mit der Zeit umgeht, wenn ich mich noch nicht speziell bei Aufgaben anmelde, aber es sieht interessant aus.
jkcunningham
Ich habe es jetzt für eine halbe Stunde oder so an und es sieht so aus, als würde es jedes Mal gestartet werden müssen. Das ist ein Nachteil. Ich versuche nicht, eine bestimmte Zeit zum Aufladen zu messen, sondern nur die Zeit, die ich am Computer verbringe. Und wenn ich vergesse, es einzuschalten, wird dies nicht berücksichtigt. Ich spiele immer noch damit.
jkcunningham
1
Dies ist eine sehr gute Frage in Bezug auf die Messung des Zeitaufwands auf dem PC. Sehr schöne Idee zum Bildschirmschoner.
Luis Alvarado
Überprüfen Sie dies auf github github.com/nitesh-/hoursboard . Dies könnte Ihre Frage beantworten
Nitesh morajkar

Antworten:

4

Ich möchte mich bedanken und ein einfaches, unformatiertes Skript (das verbessert werden kann) zurückgeben. Legen Sie es in Startanwendungen mit:

xterm -e logSessionLock.sh

Es ist auch ein Systemabsturz / Blackout vorbereitet. Es ist nicht schwer getestet ... aber es funktioniert bis jetzt großartig. Es werden 2 Dateien erstellt, eine bei $ HOME (das Protokoll) und eine andere bei / tmp (die Abhilfemaßnahme für den Systemabsturz).

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

Das Protokoll sieht folgendermaßen aus:

 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.
Wassermann Power
quelle
3

Das " Workrave " -Paket verfolgt nicht nur, ob Sie Ihren Computer benutzen und hilft Ihnen, tagsüber Pausen einzulegen , sondern bietet auch eine Reihe nützlicher Statistiken, sowohl als Rohdaten (in einer Textdatei) als auch über eine grafische Benutzeroberfläche ( Daily usage: 5:41:00 for Jul 21). Die Statistiken enthalten auch Informationen wie Minuten der Mausbenutzung, Mausbewegungsentfernung, Tastenanschläge usw.

Installieren Sie es aus den offiziellen Repositories, fügen Sie es Ihrer Menüleiste hinzu, klicken Sie mit der rechten Maustaste und wählen Sie "Statistik". Sie erhalten einen Kalender, in dem Sie den Tag auswählen können, über den Sie wissen möchten. Oder schauen Sie sich die Daten in ~ / .workrave / historystats an

Nealmcb
quelle
1
Dies scheint eine sehr praktikable Lösung zu sein. Ich würde gerne einen Weg finden, um die "Microbreak" -Erinnerungen zu deaktivieren, was ziemlich ärgerlich sein kann, aber ansonsten scheint sich genau das anzusammeln, wonach ich suche. Vielen Dank!
Jkcunningham
1
@jkcunningham Das Aktivieren oder Deaktivieren der Mikrobrüche, Ruhepausen oder des Tageslimits über das Dialogfeld "Rechtsklick / Einstellungen" ist ganz einfach. Natürlich ist es gut für Ihre Augen, Handgelenke, Arme, Ihren Rücken usw., regelmäßig Pausen einzulegen, und Workrave macht es einfach (auch unterhaltsam), dies zu tun, während es auch einfach ist, die gelegentliche Pause zu verschieben oder auszulassen, wenn Du bist mitten in etwas.
Nealmcb
2

Wenn Sie das --profile entfernen, wird ein Format ohne Zeitstempel angezeigt, das jedoch angibt, ob der Bildschirmschoner aktiv ist oder nicht.

$ 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

Ich habe eine Modifikation dieses PHP-Skripts verwendet, um Dinge basierend auf meinem Bildschirmschoner zu aktivieren oder zu deaktivieren

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

Die andere Option ist zu verwenden gnome-screensaver-command --query. Mit crontab lasse ich Bitcoin alle 4 Kerne verwenden, wenn der Bildschirmschoner aktiv ist, aber er erhält nur 1 Kern, wenn ich meinen Computer verwende.

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

ANZEIGE: Ohne die Einstellung ANZEIGE kann der gnome-screensaver-Befehl den Bildschirm nicht finden, wenn er von cron ausgeführt wird. Dies muss als derselbe Benutzer ausgeführt werden, der angemeldet ist.

2>&1: Hiermit werden Fehler in die Standardausgabe geleitet, die von ...

| grep -q 'is active';: das -q macht das grep leise, es gibt nichts aus. Der Befehl gibt jedoch einen Erfolg oder Fehler zurück, der von if verwendet wird.

Mir ist klar, dass keine dieser Lösungen eine vollständige Lösung darstellt, aber hoffentlich sind sie genug, um Ihnen den Einstieg zu erleichtern.

Asa Ayers
quelle
2

Dies ist ein vollständigeres Skript. Sie können es jede Minute von cron aus auslösen. Wenn der Bildschirmschoner aktiv ist, wird aufgezeichnet, wie lange er aktiv war. Sobald es deaktiviert ist, wird die letzte Messung durchgeführt und zu ~ / Screensaver.log hinzugefügt. Wenn Sie es von cron ausführen, kann es bei jeder Deaktivierung des Bildschirmschoners bis zu 59 Sekunden lang ungenau sein.

#!/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
quelle
Ich mag diesen Ansatz. Wenn ein Computer im Bildschirmschonermodus ausfällt und eine / tmp / screensaverAktivitätszeit protokolliert wird, kann dies zu einem Eckfall führen. Für meine Zwecke würde dies umgehen: #! / Bin / bash ## 4 Status: ## * funktioniert ## * funktioniert nicht, aber Bildschirmschoner noch nicht aktiv ## * Bildschirmschoner aktiv ## * Computer Stromausfall oder ausgeschaltet # # Ich möchte die ersten beiden Zustände protokollieren. Export DISPLAY = ': 0' SS_LAG = 10 if gnome-screensaver-command -q 2> & 1 | grep -q 'ist inaktiv'; dann DSTR = date "+%Y %m %d %H %M Echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham
Okay, das hat nicht gut funktioniert - maximal 5 Minuten für Bearbeitungen. Diesmal bekomme ich dort die Code-Markierung: [code] #! / Bin / bash # 4 heißt es: und die Bildschirmschoner-Verzögerungseinstellung export DISPLAY = ': 0' SS_LAG = 10, wenn der Gnome-Bildschirmschoner-Befehl -q 2> & 1 | grep -q 'ist inaktiv'; dann DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Ich gebe: Wie erstellt man einen Codeblock in einem Kommentar? 4 Felder funktionieren nicht.
jkcunningham
-1

Ich benutze den uptimeBefehl, aber er gibt nicht die Aktiv / Inaktiv-Zeit des Systems an. Uptime gibt eine einzeilige Anzeige der folgenden Informationen. Die aktuelle Uhrzeit, die Laufzeit des Systems, die Anzahl der aktuell angemeldeten Benutzer und der durchschnittliche Ladevorgang des Systems in den letzten 1, 5 und 15 Minuten.

Chethan S.
quelle
Meine aktuelle Betriebszeit beträgt 81 Tage 23 Stunden 25 Minuten. Ich versichere Ihnen, ich habe noch nicht so lange vor einem Computer gesessen. Danke, aber das geht nicht. Ich suche nach einer Möglichkeit, ungefähr zu bestimmen, wie lange ich täglich vor Computern sitze. Deshalb schaue ich mir den Bildschirmschoner mal aktiv / inaktiv an.
jkcunningham
Das ist gut. Ja, wie bereits erwähnt, gibt es Ihnen nicht die Aktiv / Inaktiv-Zeit des Systems und ich kenne keine Möglichkeit, sie aus den Aktiv / Inaktiv-Zeiten des Bildschirmschoners zu berechnen.
Chethan S.