GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Esiste un software che tiene traccia del tempo e dell'utilizzo della finestra e dell'applicazione?

Esiste un software che tiene il tempo delle mie attività e fornisce un rapporto?
Basato sulla finestra focalizzata e sul titolo della finestra.
Il rapporto mostrerebbe solo il tempo trascorso per una finestra specifica e il suo titolo come:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58

Risposta accettata:

EDIT:una versione dello script con rapporti ordinati può essere trovato qui

È sempre divertente scrivere una sceneggiatura per questo!

Lo script seguente produrrà un output (report) come:

------------------------------------------------------------
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
============================================================

..che viene aggiornato una volta al minuto.

Note

  • Il report riporterà eventualmente le finestre nella categoria:“Sconosciuto”. Questo è il caso quando Windows ha pid 0 (tkinter finestre, come Idle windows, unPython IDE). Tuttavia, il titolo e l'utilizzo della finestra verranno riportati correttamente.

  • La schermata di blocco con inserimento password è segnalata come “finestra di inserimento nux”.

  • Le percentuali sono arrotondate percentuali, che potrebbero occasionalmente portare a piccole differenze tra le applicazioni percentuale e la somma della percentuale della sua finestra.

    Un esempio:se un'applicazione ha due finestre utilizzate, ciascuna utilizzava 0,7% del tempo totale, entrambe le finestre riporterà 1% ciascuno (0.7 –> arrotondato a 1 ), mentre l'applicazione rapporti sull'utilizzo 1% (1.4 –> arrotondato a 1 )

    Non c'è bisogno di dire che queste differenze sono totalmente irrilevanti nell'intero quadro.

Il copione

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

Come configurare

  1. Lo script necessita di xdotool per ottenere le informazioni della finestra

    sudo apt-get install xdotool
    
  2. Copia lo script in un file vuoto, salvalo come window_logs.py

  3. Testare lo script:eseguire lo script con il comando (da terminale):

    python3 /path/to/window_logs.py
    

    Dopo un minuto, lo script crea un file di registro con i primi risultati in ~/.usagelogs . Il file è contrassegnato dall'ora con la data e l'ora di creazione. Il file viene aggiornato una volta al minuto.

    Nella parte inferiore del file, puoi vedere sia l'ora di inizio che il timestamp dell'ultima modifica. In questo modo puoi sempre vedere qual è l'intervallo di tempo del file.

    Se lo script si riavvia, viene creato un nuovo file con un nuovo timestamp (di inizio).

  4. Se tutto funziona correttamente, aggiungi ad Applicazioni di avvio:Dash> Applicazioni di avvio> Aggiungi. Aggiungi il comando:

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

Altre note

  • ~/.uselogs è una directory nascosta per impostazione predefinita. Premi (in nautilus ) Ctrl +H per renderlo visibile.
  • Così com'è, lo script arrotonda l'attività della finestra su 5 secondi, supponendo che meno di 5 secondi non stiano effettivamente utilizzando la finestra. Se desideri modificare il valore, impostalo nell'intestazione dello script nella riga:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • La sceneggiatura è estremamente "a corto di succo". Inoltre, dal momento che il tempo si aggiorna per finestra vengono eseguiti all'interno dello script, il numero di righe nel file di registro è limitato al numero effettivo di finestre utilizzate.

    Tuttavia, non eseguirei lo script per settimane di seguito, ad esempio, per evitare di accumulare troppe righe (=record di finestra) da mantenere.

Correlati:come grep nel contenuto di una variabile stringa?
Ubuntu
  1. I 8 migliori software di monitoraggio delle prestazioni delle applicazioni (APM) open source per una migliore visibilità

  2. L'applicazione basata su Gui esegue i comandi della shell in background?

  3. Backup intero os?

  4. Software per trovare il consumo di energia del desktop?

  5. Come riprodurre l'audio più velocemente ma mantenere il tono?

Come installare il software di sintesi vocale eSpeak su Ubuntu 20.04

Ci sono alternative al Software Center?

Quale software controlla la ventola su Dell Sputnik?

Esiste un software in grado di riconoscere quali note musicali sto suonando nel microfono per aiutarmi a esercitarmi con la musica?

Titolo dell'applicazione Qt

Ci sono differenze tecniche che rendono Linux meno vulnerabile ai virus rispetto a Windows?