Czy istnieje oprogramowanie, które śledzi użycie okna i aplikacji?


10

Czy istnieje oprogramowanie, które utrzymuje czas moich działań i daje raport? Na podstawie skoncentrowanego okna i tytułu okna. Raport pokaże tylko czas poświęcony na określone okno i jego tytuł, taki jak:

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

1
W centrum oprogramowania znajduje się moduł do śledzenia czasu
— Mateo

1
Można to zrobić niezwykle łatwo za pomocą dostępnych programów - nie przypisujmy do tego motywu, wcześniej użyłem takiego programu do nagrywania własnego czasu na projekcie. Z pewnością nie należy to do kategorii „zbyt szerokiej”
— Mateo

W każdym razie nie rozumiem, dlaczego to pytanie jest mocno odrzucane. To normalne i jasne pytanie. Nigdzie na stronie nie widziałem ostrzeżenia „zadaj tylko pytanie, na które nikt nie zna odpowiedzi”.
— Jacob Vlijm

Cześć Ambi. Wysłałem moją odpowiedź. Daj mi znać, jeśli dasz radę!
— Jacob Vlijm

Tak, być może mój opis był nieprawidłowy - nie chcę szpiegować nikogo oprócz mnie. Chcę mieć statystyki dotyczące tego, co zmarnowałem swój czas. Sprawdziłem „Przegląd śledzenia czasu” i „Śledzenie czasu GTimeLog”, ale tam musisz wprowadzić wszystko ręcznie - czego nie chcę robić. Jacob Vlijm, dziękuję, właśnie tego szukałem, z wyjątkiem tego, że myślałem, że istnieje takie oprogramowanie z GUI
— ambi

Odpowiedzi:


8

EDYCJA: wersję skryptu z posortowanymi raportami można znaleźć tutaj


Zawsze fajnie jest napisać dla niego skrypt!

Poniższy skrypt wygeneruje dane wyjściowe (raport), takie jak:

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


.. który jest aktualizowany raz na minutę.

Notatki

  • Raport prawdopodobnie zgłosi okna w kategorii: „Nieznany”. Dzieje się tak, gdy okna mają pid 0( tkinterokna, takie jak IdleWindows, PythonIDE). Jednak tytuł okna i użycie zostaną poprawnie zgłoszone.

  • Ekran blokady z wprowadzonym hasłem jest zgłaszany jako „okno wprowadzania Nux”.

  • Wartości procentowe są zaokrąglonymi wartościami procentowymi, co czasami może prowadzić do niewielkich różnic między procentem aplikacji a sumą procentu okna.

    Przykład: jeśli w aplikacji są używane dwa okna, z których każde wykorzystuje 0,7%całkowity czas, oba okna będą raportować 1%każde ( 0.7-> zaokrąglone do 1), podczas gdy raporty użytkowania aplikacji1% ( 1.4-> zaokrąglone do 1)

    Nie trzeba mówić, że różnice te są całkowicie nieistotne w całym obrazie.

Scenariusz

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

  1. Skrypt musi xdotooluzyskać informacje o oknie

    sudo apt-get install xdotool
  2. Skopiuj skrypt do pustego pliku i zapisz go jako window_logs.py

  3. Testuj - uruchom skrypt: tartuj skrypt za pomocą komendy (z terminala):

    python3 /path/to/window_logs.py

    Po minucie skrypt tworzy plik dziennika z pierwszymi wynikami ~/.usagelogs. Plik jest opatrzony datą i godziną utworzenia. Plik jest aktualizowany raz na minutę.

    Na dole pliku widać zarówno czas rozpoczęcia, jak i znacznik czasu ostatniej edycji. W ten sposób zawsze możesz zobaczyć, jaki jest czas trwania pliku.

    Jeśli skrypt uruchomi się ponownie, tworzony jest nowy plik z nowym (początkowym) znacznikiem czasu.

  4. Jeśli wszystko działa poprawnie, dodaj do Startup Applications: Dash> Startup Applications> Add. Dodaj polecenie:

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

Więcej notatek

  • ~/.uselogsjest domyślnie ukrytym katalogiem. Naciśnij (in nautilus) Ctrl+, Haby było widoczne.
  • W tej chwili skrypt zaokrągla aktywność okna na 5 sekund, zakładając, że mniej niż 5 sekund tak naprawdę nie używa okna. Jeśli chcesz zmienić wartość, ustaw ją w nagłówku skryptu w wierszu:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • Skrypt ma bardzo niski poziom soku. Ponadto, ponieważ aktualizacje czasu na okno są wykonywane wewnątrz skryptu, liczba wierszy w pliku dziennika jest ograniczona do faktycznej liczby używanych okien.

    Niemniej jednak nie uruchamiałbym skryptu na przykład przez kilka tygodni z rzędu, aby zapobiec gromadzeniu zbyt wielu wierszy (= rekordów okna) do utrzymania.


1
Dokładnie to, czego szukałem, oprócz tego, że dobrze jest mieć również GUI, ale mogę to zrobić sam. Dziękuję Ci.
— ambi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.