Existe-t-il un logiciel qui suit le temps d'utilisation des fenêtres et des applications?

10

Existe-t-il un logiciel qui garde le temps de mes activités et fait un rapport? Basé sur la fenêtre focalisée et le titre de la fenêtre. Le rapport affichera simplement le temps passé pour une fenêtre spécifique et son titre comme:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58
ambi
la source
1
Il y a un tracker temporel dans le centre logiciel qui fait exactement cela
Mateo
1
Cela peut être fait très facilement avec des programmes disponibles - ne laisse pas de motif à cela, j'ai déjà utilisé un tel programme pour enregistrer mon propre temps sur un projet. Ce n'est certainement pas dans la catégorie "trop ​​large"
Mateo
Quoi qu'il en soit, je ne comprends pas pourquoi cette question est fortement rejetée. C'est une question normale et claire. Je n'ai pas vu d'avertissement «poser uniquement une question dont personne ne connaît la réponse» sur le site.
Jacob Vlijm
Salut Ambi. Publié ma réponse. Faites-moi savoir si vous y parvenez!
Jacob Vlijm
Oui, ma description n'était peut-être pas correcte - je ne veux espionner personne sauf moi. Je veux juste avoir des statistiques sur ce que j'ai perdu mon temps. J'ai vérifié 'Aperçu du suivi du temps' et 'GTimeLog Time Tracker' mais là, vous devez tout saisir manuellement - ce que je ne veux pas faire. Jacob Vlijm, merci, c'est exactement ce que je cherchais sauf que je pensais qu'il y avait un logiciel comme ça avec GUI
ambi

Réponses:

8

EDIT: une version du script avec des rapports triés peut être trouvée ici


Toujours amusant d'écrire un script pour ça!

Le script ci-dessous produira une sortie (rapport) comme:

------------------------------------------------------------
nautilus
0:00:05 (3%)
------------------------------------------------------------
   0:00:05 (3%)     .usagelogs
------------------------------------------------------------
firefox
0:01:10 (36%)
------------------------------------------------------------
   0:00:05 (3%)     The Asker or the Answerer? - Ask Ubuntu Meta - Mozilla Firefox
   0:00:15 (8%)     scripts - Is there software which time- tracks window & application usage? - Ask Ubuntu - Mozilla Firefox
   0:00:10 (5%)     Ask Ubuntu - Mozilla Firefox
   0:00:15 (8%)     Why is a one line non-understandable answer used as review audit? - Ask Ubuntu Meta - Mozilla Firefox
   0:00:20 (10%)    bash - How to detect the number of opened terminals by the user - Ask Ubuntu - Mozilla Firefox
   0:00:05 (3%)     BlueGriffon - Mozilla Firefox
------------------------------------------------------------
gedit
0:02:00 (62%)
------------------------------------------------------------
   0:02:00 (62%)    2016_06_04_10_33_29.txt (~/.usagelogs) - gedit

============================================================
started: 2016-06-04 10:33:29    updated: 2016-06-04 10:36:46
============================================================


..qui est mis à jour une fois par minute.

Remarques

  • Le rapport rapportera éventuellement des fenêtres sous la catégorie: "Inconnu". C'est le cas lorsque les fenêtres ont pid 0(des tkinterfenêtres, comme des Idlefenêtres, un PythonIDE). Cependant, leur titre et leur utilisation seront correctement signalés.

  • L'écran de verrouillage avec la saisie du mot de passe est signalé comme une "fenêtre de saisie nux".

  • Les pourcentages sont des pourcentages arrondis , ce qui peut occasionnellement entraîner des différences mineures entre le pourcentage de l' application et la somme du pourcentage de sa fenêtre.

    Un exemple: si une application a deux fenêtres utilisées, chacune utilisée 0,7%du temps total, les deux fenêtres rapporteront 1%chacune ( 0.7-> arrondie à 1), tandis que les rapports d'utilisation de l' application1% ( 1.4-> arrondie à 1)

    Inutile de dire que ces différences sont totalement hors de propos dans l'ensemble.

Le scénario

#!/usr/bin/env python3
import subprocess
import time
import os

# -- set update/round time (seconds)
period = 5
# -- 
# don change anything below
home = os.environ["HOME"]
logdir = home+"/.usagelogs"

def currtime(tformat=None):
    return time.strftime("%Y_%m_%d_%H_%M_%S") if tformat == "file"\
           else time.strftime("%Y-%m-%d %H:%M:%S")

try:
    os.mkdir(logdir)
except FileExistsError:
    pass

# path to your logfile
log = logdir+"/"+currtime("file")+".txt"; startt = currtime()

def get(command):
    try:
        return subprocess.check_output(command).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def time_format(s):
    # convert time format from seconds to h:m:s
    m, s = divmod(s, 60); h, m = divmod(m, 60)
    return "%d:%02d:%02d" % (h, m, s)

def summarize():
    with open(log, "wt" ) as report:
        totaltime = sum([it[2] for it in winlist])
        report.write("")
        for app in applist:
            wins = [r for r in winlist if r[0] == app]
            apptime = sum([it[2] for it in winlist if it[0] == app])
            appperc = round(100*apptime/totaltime)
            report.write(("-"*60)+"\n"+app+"\n"+time_format(apptime)+\
                         " ("+str(appperc)+"%)\n"+("-"*60)+"\n")
            for w in wins:
                wperc = str(round(100*w[2]/totaltime))
                report.write("   "+time_format(w[2])+" ("+\
                             wperc+"%)"+(6-len(wperc))*" "+w[1]+"\n")
        report.write("\n"+"="*60+"\nstarted: "+startt+"\t"+\
                     "updated: "+currtime()+"\n"+"="*60)

t = 0; applist = []; winlist = []
while True:
    time.sleep(period)
    frpid = get(["xdotool", "getactivewindow", "getwindowpid"])
    frname = get(["xdotool", "getactivewindow", "getwindowname"])
    app = get(["ps", "-p", frpid, "-o", "comm="]) if frpid != None else "Unknown"
    # fix a few names
    if "gnome-terminal" in app:
        app = "gnome-terminal"
    elif app == "soffice.bin":
        app = "libreoffice"
    # add app to list
    if not app in applist:
        applist.append(app)
    checklist = [item[1] for item in winlist]
    if not frname in checklist:
        winlist.append([app, frname, 1*period])
    else:
        winlist[checklist.index(frname)][
            2] = winlist[checklist.index(frname)][2]+1*period
    if t == 60/period:
        summarize()
        t = 0
    else:
        t += 1

Comment installer

  1. Le script doit xdotoolobtenir les informations de la fenêtre

    sudo apt-get install xdotool
  2. Copiez le script dans un fichier vide, enregistrez-le sous window_logs.py

  3. Testez- exécutez le script: lancez le script par la commande (depuis un terminal):

    python3 /path/to/window_logs.py

    Après une minute, le script crée un fichier journal contenant les premiers résultats ~/.usagelogs. Le fichier est horodaté avec la date et l'heure de création. Le fichier est mis à jour une fois par minute.

    Au bas du fichier, vous pouvez voir à la fois l'heure de début et l'horodatage de la dernière modification. De cette façon, vous pouvez toujours voir quelle est la durée du fichier.

    Si le script redémarre, un nouveau fichier avec un nouvel horodatage (de début) est créé.

  4. Si tout fonctionne bien, ajoutez aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:

    /bin/bash -c "sleep 15 && python3 /path/to/window_logs.py"

Plus de notes

  • ~/.uselogsest un répertoire caché par défaut. Appuyez sur (in nautilus) Ctrl+ Hpour le rendre visible.
  • En l'état, le script arrondit l'activité de la fenêtre sur 5 secondes, en supposant que moins de 5 secondes n'utilise pas vraiment la fenêtre. Si vous souhaitez modifier la valeur, définissez-la dans la tête du script dans la ligne:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • Le script est extrêmement "faible en jus". De plus, comme les mises à jour temporelles par fenêtre sont effectuées à l'intérieur du script, le nombre de lignes dans le fichier journal est limité au nombre réel de fenêtres utilisées.

    Néanmoins, je n'exécuterais pas le script pendant des semaines d'affilée par exemple, pour éviter d'accumuler trop de lignes (= enregistrements de fenêtre) à maintenir.

Jacob Vlijm
la source
1
Exactement ce que je cherchais, sauf que c'est bien d'avoir une interface graphique, mais je peux le faire moi-même. Je vous remercie.
ambi