GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Existe-t-il un logiciel qui suit l'utilisation de la fenêtre et de l'application dans le temps ?

Existe-t-il un logiciel qui garde le temps de mes activités et donne un rapport ?
Basé sur la fenêtre ciblé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

Réponse acceptée :

EDIT :une version du script avec des rapports triés peut être trouvé 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 signalera éventuellement des fenêtres sous la catégorie :« Inconnu ». C'est le cas lorsque les fenêtres ont pid 0 (tkinter fenêtres, telles que Idle windows, un Python IDE). Cependant, leur titre de fenêtre et leur utilisation seront signalés correctement.

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

  • Les pourcentages sont arrondis pourcentages, ce qui peut parfois entraîner des différences mineures entre les applications pourcentage et la somme du pourcentage de sa fenêtre.

    Un exemple :si une application a deux fenêtres utilisées, chacune a utilisé 0,7% du temps total, les deux fenêtres rapportera 1% chacun (0.7 –> arrondi à 1 ), tandis que l'application rapports d'utilisation 1% (1.4 –> arrondi à 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 configurer

  1. Le script a besoin de xdotool pour obtenir 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 avec les premiers résultats dans ~/.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 correctement, ajoutez aux applications de démarrage :Dash> Startup Applications> Add. Ajoutez la commande :

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

Plus de remarques

  • ~/.uselogs est un répertoire caché par défaut. Appuyez sur (dans nautilus ) Ctrl +H pour 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'utilisent pas vraiment la fenêtre. Si vous souhaitez modifier la valeur, définissez-la dans l'en-tête du script à la ligne :

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • Le script est extrêmement "faible en jus". De plus, étant donné que l'heure est mise à jour 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.

Connexe :Comment grep dans le contenu d'une variable de chaîne ?
Ubuntu
  1. L'application basée sur l'interface graphique exécute-t-elle les commandes Shell en arrière-plan ?

  2. Sauvegarder tout le système d'exploitation ?

  3. Logiciel Torrent Rss ?

  4. Quel logiciel contrôle le ventilateur sur Dell Sputnik ?

  5. Existe-t-il un logiciel capable de reconnaître les notes de musique que je joue dans le microphone - pour m'aider à pratiquer la musique ?

Comment installer le logiciel de synthèse vocale eSpeak sur Ubuntu 20.04

Existe-t-il des alternatives au centre logiciel ?

Fichier .desktop. Une erreur s'est produite lors du lancement de l'application ?

Application de capture d'écran qui peut tout capturer, y compris les menus ?

Titre de l'application Qt

Existe-t-il des différences techniques qui rendent Linux moins vulnérable aux virus que Windows ?