Sposób pomiaru zużycia komputera za pomocą czasu wygaszacza ekranu aktywnego / nieaktywnego?

15

Szukam prostego sposobu na określenie przybliżonej ilości czasu spędzanego na komputerze. Może to być trudne zadanie, jeśli próbujesz monitorować procesy, naciśnięcia klawiszy, kliknięcia myszą i tym podobne, ponieważ możesz robić wszystko, od myślenia o problemie z kodowaniem, czytania artykułu internetowego, rozmowy przez telefon lub chodzenia pies. Komputer nie może odczytać moich myśli. Ponieważ zostawiam komputery na 24/7 monitorowanie logowania nie będzie działać.

Wpadłem na pomysł rejestrowania, ile czasu komputer spędza w trybie wygaszacza ekranu. Mój błąd nie byłby wówczas większy niż iloczyn czasu bezczynności wygaszacza ekranu z liczbą przejść w tryb wygaszacza ekranu. Odjęcie tego od 24 godzin dałoby mi szacunek, który byłby uzasadniony dla moich celów.

Problem polega na tym: nie wiem, jak się zalogować, gdy wygaszacz ekranu włącza się i wyłącza. W tej chwili używam Ubuntu 10.10 na większości komputerów, a na niektórych z nich zacznę aktualizację do 11.04.

Jakieś pomysły?

[edytuj] Po dalszym googlowaniu trafiłem na monitor dbus, który wyglądał, jakby mógł działać, ale brakuje mu ważnego składnika. Oto uruchamiany przeze mnie skrypt, który uruchamia monitor jako demon:

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

Oto wynik, jaki wytwarza po kilkukrotnym zablokowaniu i odblokowaniu ekranu:

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

Druga kolumna to oczywiście unix UTC w kilka sekund. Brakującym składnikiem jest to, że nie określa, czy wygaszacz ekranu jest włączony, czy wyłączony! Przypuszczam, że mogę założyć, że przełączają się od czasu, gdy zdarzyło się NameAcquired, ale denerwuje mnie, że może istnieć brakujące lub dodatkowe zdarzenie, którego nie mogę przewidzieć, co wytrąciłoby wszystko z synchronizacji.

Bardzo zobowiązany do pomysłów.

jkcunningham

jkcunningham
źródło
Czy narzędzia zarządzania czasem, takie jak chomik, są opcją?
Nathan Osman,
Właśnie to zainstalowałem. Nie jest jasne, jak poradzi sobie z czasem, którego jeszcze nie loguję do zadań, ale wygląda interesująco.
jkcunningham
Mam go teraz przez około pół godziny i wygląda na to, że wymaga, aby był uruchamiany za każdym razem. To jest wada. Nie próbuję taktować określonego czasu, powiedzmy, na ładowanie, tylko czas spędzony przy komputerze. A jeśli zapomnę go włączyć, czas ten nie zostanie uwzględniony. Nadal się z tym bawię.
jkcunningham
1
To bardzo dobre pytanie w odniesieniu do pomiaru czasu spędzanego na komputerze. Bardzo fajny pomysł na wygaszacz ekranu.
Luis Alvarado
Sprawdź to na github github.com/nitesh-/hoursboard . To może odpowiedzieć na twoje pytanie
Nitesh morajkar

Odpowiedzi:

4

Chciałbym podziękować i wesprzeć prosty, surowy skrypt (można go ulepszyć), umieść go w aplikacjach startowych za pomocą:

xterm -e logSessionLock.sh

jest przygotowany na awarię / zaciemnienie systemu. To nie jest ciężko przetestowane ... ale działa teraz świetnie. utworzy 2 pliki, jeden w $ HOME (log) inny w / tmp (obejście awarii sys)

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

dziennik wygląda następująco:

 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.
Moc Wodnika
źródło
3

Workrave ” nie tylko śledzi, czy korzystasz z komputera i pomaga robić przerwy w ciągu dnia, ale także zapewnia ładny zestaw statystyk, zarówno surowych (w pliku tekstowym), jak i za pomocą GUI ( Daily usage: 5:41:00 for Jul 21). Statystyki obejmują również takie rzeczy, jak minuty użycia myszy, odległość ruchu myszy, naciśnięcia klawiszy itp.

Zainstaluj go z oficjalnych repozytoriów, dodaj go do paska menu, kliknij prawym przyciskiem myszy i wybierz „statystyki”. Otrzymasz kalendarz do wyboru dnia, o którym chcesz wiedzieć. Lub spójrz na dane w ~ / .workrave / historystats

nealmcb
źródło
1
To wygląda na bardzo praktyczne rozwiązanie. Chciałbym znaleźć sposób, aby wyłączyć przypomnienia o „mikropasieniu”, co może być dość denerwujące, ale w przeciwnym razie wydaje się, że gromadzi tylko to, czego szukam. Dzięki!
jkcunningham
1
@ jkcunningham Łatwo można włączyć lub wyłączyć mikroprzędy, przerwy na odpoczynek lub dzienny limit w oknie dialogowym prawym przyciskiem myszy / Preferencje. Chociaż oczywiście dobrze jest robić regularne przerwy dla oczu, nadgarstków, ramion, pleców itp., A poręczenie ułatwia (nawet zabawę) robienie tego, jednocześnie ułatwiając odłożenie lub pominięcie okazjonalnej przerwy, jeśli jesteś w trakcie czegoś.
nealmcb
2

Jeśli usuniesz --profile, otrzymasz format, w którym brakuje znaczników czasu, ale ma on wpływ na to, czy wygaszacz ekranu jest aktywny.

$ 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

Użyłem modyfikacji tego skryptu PHP, aby aktywować lub dezaktywować rzeczy w oparciu o mój wygaszacz ekranu

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

Inną opcją jest użycie gnome-screensaver-command --query . Używając crontaba, pozwalam bitcoinowi używać wszystkich 4 rdzeni, kiedy wygaszacz ekranu jest aktywny, ale dostaje tylko 1 rdzeń, gdy używam mojego komputera.

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

WYŚWIETLANIE: Bez ustawienia WYŚWIETLANIE polecenie gnome-wygaszacz ekranu nie będzie w stanie znaleźć ekranu po uruchomieniu z crona. Musi to działać, gdy zalogował się ten sam użytkownik.

2>&1: To przekierowuje wszelkie błędy na standardowe wyjście, które jest przechwytywane przez ...

| grep -q 'is active';: -q powoduje, że grep jest cichy, nic nie wyświetla. Ale polecenie zwraca sukces lub niepowodzenie, które jest używane przez if.

Zdaję sobie sprawę, że żadne z nich nie jest kompletnym rozwiązaniem, ale mam nadzieję, że wystarczą na początek.

Asa Ayers
źródło
2

To jest bardziej kompletny skrypt. Możesz uruchomić go z crona co minutę, a jeśli wygaszacz ekranu jest aktywny, zapisze, jak długo był aktywny. Po dezaktywacji wykona ostatni pomiar i doda go do ~ / Screensaver.log. Jeśli uruchomisz go z crona, może to być niedokładne do 59 sekund za każdym razem, gdy wygaszacz ekranu się dezaktywuje.

#!/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
źródło
Lubię to podejście. Może wystąpić problem z narożną skrzynką, jeśli maszyna ulegnie awarii w trybie wygaszacza ekranu, pozostawiając wiszący / tmp / screenaveractivetime do zalogowania. Dla moich celów można to obejść: #! / Bin / bash ## 4 stwierdza: ## * working ## * nie działa, ale wygaszacz ekranu nie jest jeszcze aktywny ## * wygaszacz ekranu aktywny ## * awaria zasilania komputera lub został wyłączony # # Chcę zalogować eksport dwóch pierwszych stanów DISPLAY = ': 0' SS_LAG = 10 jeśli gnome-wygaszacz ekranu-polecenie -q 2> i 1 | grep -q 'jest nieaktywny'; następnie DSTR = date "+%Y %m %d %H %M echo „$ SS_LAG $ DSTR” >> $ {HTDOCS} /data/work.log fi
jkcunningham
Okej, to nie działało dobrze - maksimum 5 minut na edycję. Tym razem znajdę tam znacznik kodu: [kod] #! / Bin / bash # 4 stwierdza: # * działa # * bezczynnie, wygaszacz ekranu nieaktywny # * wygaszacz ekranu aktywny # * komputer wyłączony # Chcę się zalogować dwa pierwsze i eksport ustawienia opóźnienia wygaszacza ekranu DISPLAY = ': 0' SS_LAG = 10 jeśli gnome-wygaszacz ekranu-polecenie -q 2> i 1 | grep -q 'jest nieaktywny'; następnie DSTR = date "+%Y %m %d %H %M echo „$ SS_LAG $ DSTR” >> $ {HTDOCS} /data/work.log fi [/ code] Daję: jak utworzyć blok kodu w komentarzu? 4 spacje nie działają.
jkcunningham
-1

Używam uptimepolecenia, ale nie podaje ono czasu aktywnego / nieaktywnego systemu. uptime zapewnia wyświetlanie w jednym wierszu następujących informacji. Aktualny czas, czas działania systemu, ilu użytkowników jest aktualnie zalogowanych, a średnie obciążenie systemu dla ostatnich 1, 5 i 15 minut.

Chethan S.
źródło
Mój obecny czas pracy wynosi 81 dni 23 godziny 25 minut. Zapewniam cię, że tak długo nie siedziałem przed komputerem. Dzięki, ale to nie zadziała. Szukam sposobu, aby określić - z grubsza - jak długo siedzę przed komputerami na co dzień. Dlatego patrzę na czasy aktywności / nieaktywności wygaszacza ekranu.
jkcunningham
Dobre. Tak, jak już wspomniałem, nie da ci czasu aktywności / nieaktywności systemu i nie znam sposobu na obliczenie go na podstawie czasu aktywności / nieaktywności wygaszacza ekranu.
Chethan S.