GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Gibt es eine Software, die die Fenster- und Anwendungsnutzung zeitlich verfolgt?

Gibt es eine Software, die meine Aktivitäten aufzeichnet und einen Bericht erstellt?
Basierend auf dem fokussierten Fenster und dem Fenstertitel.
Der Bericht zeigt nur die für ein bestimmtes Fenster aufgewendete Zeit und seinen Titel wie:

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

Akzeptierte Antwort:

BEARBEITEN:eine Version des Skripts mit sortierten Berichten finden Sie hier

Es macht immer Spaß, ein Skript dafür zu schreiben!

Das folgende Skript erzeugt eine Ausgabe (Bericht) wie:

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

..die einmal pro Minute aktualisiert wird.

Notizen

  • Der Bericht wird möglicherweise Fenster unter der Kategorie „Unbekannt“ melden. Dies ist der Fall, wenn Windows pid 0 hat (tkinter Windows, wie z. B. Idle Windows, ein Python IDE). Ihr Fenstertitel und ihre Verwendung werden jedoch korrekt gemeldet.

  • Der Sperrbildschirm mit Passworteingabe wird als „nux input window“ gemeldet.

  • Die Prozentangaben sind gerundet Prozentangaben, was gelegentlich zu geringfügigen Unterschieden zwischen den Anwendungen führen kann Prozentsatz und die Summe der Prozentsätze seines Fensters.

    Ein Beispiel:Wenn eine Anwendung zwei Fenster verwendet, verwendet jedes 0,7% der Gesamtzeit beide Fenster wird 1% melden jeweils (0.7 –> auf 1 gerundet ), während die Anwendung Nutzung meldet 1% (1.4 –> auf 1 gerundet )

    Keine Notwendigkeit zu sagen, dass diese Unterschiede im Gesamtbild völlig irrelevant sind.

Das 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

Einrichtung

  1. Das Skript benötigt xdotool um die Fensterinformationen abzurufen

    sudo apt-get install xdotool
    
  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es als window_logs.py

  3. Testen Sie das Skript:Starten Sie das Skript mit dem Befehl (von einem Terminal):

    python3 /path/to/window_logs.py
    

    Nach einer Minute erstellt das Skript eine Protokolldatei mit den ersten Ergebnissen in ~/.usagelogs . Die Datei erhält einen Zeitstempel mit Erstellungsdatum und -zeit. Die Datei wird einmal pro Minute aktualisiert.

    Am Ende der Datei sehen Sie sowohl die Startzeit als auch den Zeitstempel der letzten Bearbeitung. Auf diese Weise können Sie immer sehen, wie lange die Datei verstrichen ist.

    Wenn das Skript neu gestartet wird, wird eine neue Datei mit einem neuen (Start-)Zeitstempel erstellt.

  4. Wenn alles funktioniert, fügen Sie es zu Startup Applications hinzu:Dash> Startup Applications> Add. Fügen Sie den Befehl hinzu:

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

Weitere Notizen

  • ~/.uselogs ist standardmäßig ein verstecktes Verzeichnis. Drücken Sie (in nautilus ) Strg +H um es sichtbar zu machen.
  • So wie es ist, rundet das Skript die Aktivität des Fensters auf 5 Sekunden ab, vorausgesetzt, weniger als 5 Sekunden verwenden das Fenster nicht wirklich. Wenn Sie den Wert ändern möchten, setzen Sie ihn im Kopf des Skripts in der Zeile:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • Das Drehbuch ist extrem „saftarm“. Außerdem wird die Zeit pro Fenster aktualisiert innerhalb des Skripts durchgeführt werden, ist die Anzahl der Zeilen in der Protokolldatei auf die tatsächliche Anzahl der verwendeten Fenster begrenzt.

    Trotzdem würde ich das Skript zum Beispiel nicht wochenlang hintereinander ausführen, um zu verhindern, dass sich zu viele Zeilen (=Fensterdatensätze) ansammeln, die gewartet werden müssen.

Verwandte:Wie kann man den Inhalt einer String-Variable eingeben?
Ubuntu
  1. Top 8 Open-Source-Software zur Überwachung der Anwendungsleistung (APM) für bessere Sichtbarkeit

  2. Neue Open-Source-Software ähnlich wie Instagram?

  3. Software zur Ermittlung des Desktop-Energieverbrauchs?

  4. Wie kann man Audio schneller abspielen, aber die Tonhöhe beibehalten?

  5. Wie kann eine kostenlose, proprietäre Anwendung beim Software Center eingereicht werden?

So installieren Sie die eSpeak Text-to-Speech-Software unter Ubuntu 20.04

RSS-Torrent-Software?

Gibt es Alternativen zum Software Center?

Welche Software steuert den Lüfter auf Dell Sputnik?

Titel der Qt-Anwendung

Steganographie-Software