Comment mesurer l'utilisation de l'ordinateur via l'économiseur d'écran temps actif / non actif?

15

Je cherche un moyen simple de déterminer la quantité approximative de temps que je passe par jour sur un ordinateur. Cela peut être une tâche difficile si vous essayez de surveiller les processus, les pressions de touches, les clics de souris, etc. chien. L'ordinateur ne peut pas lire dans mes pensées. Puisque je laisse des ordinateurs sur 24/7, la surveillance des connexions ne fonctionnera pas.

J'ai eu l'idée d'enregistrer le temps que l'ordinateur passe en mode économiseur d'écran. Mon erreur ne serait alors pas supérieure au produit du temps d'inactivité de l'économiseur d'écran avec le nombre de fois qu'il passe en mode économiseur d'écran. La soustraction de 24 heures me donnerait une estimation raisonnable pour mes besoins.

Le problème est: je ne sais pas comment me connecter lorsque l'économiseur d'écran s'allume et s'éteint. J'utilise Ubuntu 10.10 en ce moment sur la plupart des machines, sur le point de commencer la mise à niveau vers 11.04 sur certaines d'entre elles.

Des idées?

[modifier] Après plus de recherche sur Google, je suis tombé sur le moniteur dbus qui semblait fonctionner, mais il manque un ingrédient important. Voici le script que j'exécute qui lance le moniteur en tant que démon:

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

Voici la sortie qu'il produit après avoir verrouillé et déverrouillé l'écran plusieurs fois:

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 deuxième colonne est évidemment unix UTC en quelques secondes. L'ingrédient manquant est qu'il n'identifie pas si l'économiseur d'écran est activé ou désactivé! Je suppose que je pourrais supposer qu'ils basculent à partir du moment où NameAcquired se produit, mais cela me fait mal à l'idée qu'il pourrait y avoir un événement manquant ou supplémentaire que je ne peux pas prévoir qui pourrait tout désynchroniser.

Très obligé pour les idées.

jkcunningham

jkcunningham
la source
Les outils de gestion du temps comme Hamster sont-ils une option?
Nathan Osman
Je viens de l'installer. Il n'est pas clair comment cela va gérer le temps que je ne me connecte pas encore spécifiquement aux tâches, mais cela semble intéressant.
jkcunningham
Je l'ai depuis maintenant environ une demi-heure et il semble qu'il nécessite qu'il soit démarré à chaque fois. Voilà un inconvénient. Je n'essaie pas de chronométrer un temps particulier pour, disons, des fins de charge, juste du temps passé sur l'ordinateur. Et si j'oublie de l'allumer, ce temps ne sera pas comptabilisé. Je joue toujours avec.
jkcunningham
1
C'est une très bonne question en ce qui concerne la mesure du temps passé sur le PC. Très belle idée sur l'économiseur d'écran.
Luis Alvarado
Vérifiez cela sur github github.com/nitesh-/hoursboard . Cela pourrait répondre à votre question
Nitesh morajkar

Réponses:

4

Je voudrais remercier et contribuer en retour un script simple et brut (peut être amélioré), le mettre sur les applications de démarrage avec:

xterm -e logSessionLock.sh

c'est aussi un crash / blackout système préparé. Il n'est pas lourdement testé ... mais fonctionne très bien jusqu'à présent. il va créer 2 fichiers, un à $ HOME (le journal) un autre à / tmp (la solution de contournement 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

le journal est comme ceci:

 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.
Puissance du Verseau
la source
3

Le package " Workrave " permet non seulement de savoir si vous utilisez votre ordinateur et vous aide à prendre des pauses pendant la journée, mais fournit également un bel ensemble de statistiques, à la fois brutes (dans un fichier texte) et via une interface graphique ( Daily usage: 5:41:00 for Jul 21). Les statistiques incluent également des choses comme les minutes d'utilisation de la souris, la distance de déplacement de la souris, les frappes, etc.

Installez-le à partir des dépôts officiels, ajoutez-le à votre barre de menu, faites un clic droit et choisissez "statistiques". Vous obtiendrez un calendrier pour choisir le jour que vous souhaitez connaître. Ou regardez les données dans ~ / .workrave / historystats

nealmcb
la source
1
Cela ressemble à une solution très pratique. Je voudrais trouver un moyen de désactiver les rappels "micro-coupure" qui peuvent être plutôt ennuyeux, mais sinon cela semble accumuler exactement ce que je recherche. Merci!
jkcunningham
1
@jkcunningham Il est facile d'activer ou de désactiver les micro-coupures, les pauses ou la limite quotidienne dans la boîte de dialogue clic droit / Préférences. Bien sûr, il est bon que vos yeux, vos poignets, vos bras, votre dos, etc. prennent réellement des pauses régulières, et workrave facilite (voire amusant) de le faire tout en facilitant le report ou le saut de la pause occasionnelle si vous êtes en plein milieu de quelque chose.
nealmcb
2

Si vous supprimez le --profile, vous obtiendrez un horodatage au format manquant, mais il aura si l'économiseur d'écran est actif ou non.

$ 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

J'ai utilisé une modification de ce script PHP pour activer ou désactiver des choses basées sur mon économiseur d'écran

#!/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'autre option est d'utiliser gnome-screensaver-command --query. En utilisant crontab, je laisse bitcoin utiliser les 4 cœurs lorsque l'économiseur d'écran est actif, mais il n'obtient qu'un seul cœur lorsque j'utilise mon ordinateur.

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

AFFICHAGE: Sans définir DISPLAY, gnome-screensaver-command ne pourra pas trouver l'écran lorsqu'il est exécuté à partir de cron. Cela doit s'exécuter en tant que même utilisateur connecté.

2>&1: Cela dirige toutes les erreurs dans la sortie standard, qui est capturée par ...

| grep -q 'is active';: le -q rend le grep silencieux, il ne produit rien. Mais la commande renvoie un succès ou un échec utilisé par if.

Je me rends compte qu'aucune de ces solutions n'est une solution complète, mais j'espère qu'elles sont suffisantes pour vous aider à démarrer.

Asa Ayers
la source
2

Ceci est un script plus complet. Vous pouvez le déclencher depuis cron toutes les minutes et si l'économiseur d'écran est actif, il enregistrera depuis combien de temps il est actif. Une fois désactivé, il prendra la dernière mesure et l'ajoutera à ~ / Screensaver.log. Si vous l'exécutez à partir de cron, il peut être inexact pendant 59 secondes à chaque fois que l'économiseur d'écran se désactive.

#!/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
la source
J'aime cette approche. Il peut y avoir un problème de cas d'angle si une machine tombe en panne en mode économiseur d'écran laissant une heure active / tmp / screensaveractiv à enregistrer. Pour mes besoins, cela contournerait le problème: #! / Bin / bash ## 4 états: ## * working ## * ne fonctionne pas, mais l'économiseur d'écran n'est pas encore actif ## * screensaver actif ## * panne de courant de l'ordinateur ou éteint # # Je veux enregistrer les deux premiers états export DISPLAY = ': 0' SS_LAG = 10 si gnome-screensaver-command -q 2> & 1 | grep -q 'est inactif'; puis DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham
D'accord, cela n'a pas bien fonctionné - 5 minutes maximum pour les modifications. Cette fois, je vais y trouver le code: [code] #! / Bin / bash # 4 indique: # * fonctionne # * inactif, économiseur d'écran inactif # * économiseur d'écran actif # * ordinateur éteint # Je veux enregistrer les deux premiers et le réglage du délai de l'économiseur d'écran export DISPLAY = ': 0' SS_LAG = 10 si gnome-screensaver-command -q 2> & 1 | grep -q 'est inactif'; alors DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Je donne: comment créer un bloc de code dans un commentaire? 4 espaces ne fonctionnent pas.
jkcunningham
-1

J'utilise la uptimecommande, mais elle ne donne pas l'heure active / inactive du système. uptime donne un affichage sur une ligne des informations suivantes. L'heure actuelle, la durée de fonctionnement du système, le nombre d'utilisateurs actuellement connectés et les moyennes de charge du système pour les 1, 5 et 15 dernières minutes.

Chethan S.
la source
Mon temps de disponibilité actuel est de 81 jours 23 heures 25 minutes. Je vous assure que je ne suis pas assis devant un ordinateur depuis si longtemps. Merci, mais ça ne marchera pas. Je cherche un moyen de déterminer - à peu près - combien de temps je m'assois devant des ordinateurs quotidiennement. C'est pourquoi je regarde les temps actifs / inactifs de l'économiseur d'écran.
jkcunningham
C'est bon. Oui, comme je l'ai mentionné, cela ne vous donnera pas le temps actif / inactif du système et je ne sais pas comment le calculer à partir des temps actifs / inactifs de l'économiseur d'écran.
Chethan S.8