GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Existe un software que controle el uso de aplicaciones y ventanas en el tiempo?

¿Hay algún software que registre el tiempo de mis actividades y proporcione un informe?
Basado en la ventana enfocada y el título de la ventana.
El informe solo mostraría el tiempo dedicado a una ventana específica y su título como:

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

Respuesta aceptada:

EDITAR:una versión del script con informes ordenados se puede encontrar aquí

¡Siempre es divertido escribir un guión para ello!

El siguiente script producirá un resultado (informe) como:

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

..que se actualiza una vez por minuto.

Notas

  • El informe posiblemente informará ventanas en la categoría:"Desconocido". Este es el caso cuando Windows tiene pid 0 (tkinter ventanas, como Idle ventanas, un Python IDE). Sin embargo, el título de la ventana y el uso se informarán correctamente.

  • La pantalla de bloqueo con entrada de contraseña se informa como una "ventana de entrada nux".

  • Los porcentajes están redondeados porcentajes, lo que ocasionalmente puede dar lugar a pequeñas diferencias entre la aplicación porcentaje y la suma del porcentaje de su ventana.

    Un ejemplo:si una aplicación tiene dos ventanas usadas, cada una usó 0,7% del tiempo total, ambas ventanas reportará 1% cada uno (0.7 –> redondeado a 1 ), mientras que la aplicación informes de uso 1% (1.4 –> redondeado a 1 )

    No es necesario decir que estas diferencias son totalmente irrelevantes en el panorama general.

El guión

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

Cómo configurar

  1. El script necesita xdotool para obtener la información de la ventana

    sudo apt-get install xdotool
    
  2. Copie el script en un archivo vacío, guárdelo como window_logs.py

  3. Pruebe:ejecute el script:inicie el script con el comando (desde una terminal):

    python3 /path/to/window_logs.py
    

    Después de un minuto, el script crea un archivo de registro con los primeros resultados en ~/.usagelogs . El archivo tiene una marca de tiempo con la fecha y hora de creación. El archivo se actualiza una vez por minuto.

    En la parte inferior del archivo, puede ver tanto la hora de inicio como la marca de tiempo de la última edición. De esta manera, siempre puede ver cuál es el período de tiempo del archivo.

    Si el script se reinicia, se crea un nuevo archivo con una nueva marca de tiempo (de inicio).

  4. Si todo funciona bien, agregue a Aplicaciones de inicio:Dash> Aplicaciones de inicio> Agregar. Agregue el comando:

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

Más notas

  • ~/.uselogs es un directorio oculto por defecto. Presione (en nautilus ) Ctrl +H para hacerlo visible.
  • Tal como está, la secuencia de comandos redondea la actividad de la ventana en 5 segundos, asumiendo que menos de 5 segundos realmente no usan la ventana. Si desea cambiar el valor, configúrelo en el encabezado del script en la línea:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • El guión es extremadamente "bajo en jugo". Además, dado que el tiempo se actualiza por ventana se realizan dentro del script, la cantidad de líneas en el archivo de registro se limita a la cantidad real de ventanas utilizadas.

    Sin embargo, no ejecutaría el script durante semanas seguidas, por ejemplo, para evitar acumular demasiadas líneas (=registros de ventana) para mantener.

Relacionado:¿Cómo grep en el contenido de una variable de cadena?
Ubuntu
  1. ¿Existe un software que pueda reconocer qué notas musicales estoy tocando en el micrófono para ayudarme a practicar música?

  2. Título de la aplicación Qt

  3. software de esteganografía

  4. ¿Existen diferencias técnicas que hacen que Linux sea menos vulnerable a los virus que Windows?

  5. ¿Cómo limitar el uso de la memoria de la aplicación?

Cómo instalar el software de texto a voz eSpeak en Ubuntu 20.04

Los 6 mejores software de desarrollo de aplicaciones gratuito y de código abierto

¿La aplicación basada en interfaz gráfica de usuario ejecuta comandos de shell en segundo plano?

Copia de seguridad de todo el sistema operativo?

¿Existen alternativas al centro de software?

¿Aplicación de captura de pantalla que puede capturar todo, incluidos los menús?