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 queIdle
windows, unPython
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 rapportera1%
chacun (0.7
–> arrondi à1
), tandis que l'application rapports d'utilisation1%
(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
-
Le script a besoin de
xdotool
pour obtenir les informations de la fenêtresudo apt-get install xdotool
-
Copiez le script dans un fichier vide, enregistrez-le sous
window_logs.py
-
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éé.
-
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 (dansnautilus
) 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.