GNU/Linux >> Znalost Linux >  >> Ubuntu

Existuje software, který sleduje okno a využití aplikací?

Existuje software, který zaznamenává čas mých aktivit a podává zprávu?
Na základě zaměřeného okna a názvu okna.
Zpráva by pouze zobrazovala čas strávený pro konkrétní okno a jeho název jako:

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

Přijatá odpověď:

EDIT:verze skriptu s seřazenými přehledy naleznete zde

Psaní scénáře je vždy zábavné!

Skript níže vytvoří výstup (zprávu) jako:

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

..který se aktualizuje jednou za minutu.

Poznámky

  • Hlášení bude pravděpodobně hlásit okna v kategorii:„Neznámé“. To je případ, kdy okna mají pid 0 (tkinter okna, například Idle windows, Python IDE). Jejich název okna a použití však budou hlášeny správně.

  • Zamykací obrazovka se zadáním hesla je hlášena jako „okno pro zadávání nux“.

  • Procenta jsou zaokrouhlena procenta, což může občas vést k drobným rozdílům mezi aplikacemi procento a součet procent jeho okna.

    Příklad:Pokud aplikace používá dvě okna, každé používá 0,7% z celkového času, obě okna bude hlásit 1% každý (0.7 –> zaokrouhleno na 1 ), zatímco aplikace zprávy o využití 1% (1.4 –> zaokrouhleno na 1 )

    Není třeba říkat, že tyto rozdíly jsou v celém obrázku zcela irelevantní.

Skript

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

Jak nastavit

  1. Skript potřebuje xdotool získat informace o okně

    sudo apt-get install xdotool
    
  2. Zkopírujte skript do prázdného souboru a uložte jej jako window_logs.py

  3. Test-spusťte skript:spusťte skript příkazem (z terminálu):

    python3 /path/to/window_logs.py
    

    Po jedné minutě skript vytvoří soubor protokolu s prvními výsledky v ~/.usagelogs . Soubor je opatřen časovým razítkem s datem a časem vytvoření. Soubor se aktualizuje jednou za minutu.

    V dolní části souboru můžete vidět čas zahájení a časové razítko poslední úpravy. Tímto způsobem můžete vždy vidět, jaké je časové rozpětí souboru.

    Pokud se skript restartuje, vytvoří se nový soubor s novým (start-) časovým razítkem.

  4. Pokud vše funguje dobře, přidejte do Startup Applications:Dash> Startup Applications> Add. Přidejte příkaz:

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

Další poznámky

  • ~/.uselogs je ve výchozím nastavení skrytý adresář. Stiskněte (v nautilus ) Ctrl +H aby to bylo vidět.
  • Jak to je, skript zaokrouhlí aktivitu okna na 5 sekund, za předpokladu, že méně než 5 sekund okno ve skutečnosti nepoužívá. Pokud chcete změnit hodnotu, nastavte ji v záhlaví skriptu v řádku:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • Scénář je extrémně „málo šťávy“. Navíc se od času aktualizuje za okno jsou prováděny uvnitř skriptu, počet řádků v souboru protokolu je omezen na skutečný počet použitých oken.

    Nicméně bych skript nespouštěl například týdny v řadě, abych zabránil hromadění příliš velkého množství řádků (=záznamů oken), které by bylo možné udržovat.

Související:Jak grepovat obsah řetězcové proměnné?
Ubuntu
  1. Top 6 bezplatného softwaru pro vývoj aplikací s otevřeným zdrojovým kódem

  2. Spouští aplikace založená na Gui příkazy Shell na pozadí?

  3. Ny Open Source Software podobný Instagramu?

  1. Software RSS Torrent?

  2. Software pro zjištění spotřeby energie stolního počítače?

  3. Jaký software řídí ventilátor na Dell Sputnik?

  1. Jak lze bezplatnou, proprietární aplikaci odeslat do Centra softwaru?

  2. Soubor .desktop. Došlo k chybě při spouštění aplikace?

  3. Screenshot Aplikace, která dokáže zachytit vše, včetně menu?