Cronómetro del espacio de trabajo?

13

¿Existe algún programa que pueda servir como cronómetro dependiente del espacio de trabajo? Me gustaría saber cuánto tiempo he pasado en cada espacio de trabajo todos los días.

Editar: estoy usando Unity.

Gazorpazorp
fuente
¿Estás usando Unity?
Jacob Vlijm
¿Qué administrador de escritorio estás usando?
David Foerster
1
Sí, estoy usando la unidad.
Gazorpazorp

Respuestas:

11

¡Buena pregunta!

El siguiente script crea un archivo de registro: ~/viewport_log.txt en su directorio personal, donde se informa de visualización de la sesión actual (espacio de trabajo) tiempo de uso por ventana gráfica.

El informe se actualiza una vez cada dos segundos, con el siguiente aspecto (en una ejecución rápida):

workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05

en el formato

hours:minutse:seconds

Como puede ver, solo usé el espacio de trabajo 1, 2, 6 y 8.

Cómo utilizar

El script usa el wmctrl -dcomando para obtener los datos de la ventana gráfica actual, por lo que debe instalarlo primero:

sudo apt-get install wmctrl

Luego:

  1. Copie el script a continuación en un archivo vacío, guárdelo como workspace_log.py
  2. Pruébalo con el comando:

    python3 /path/to/workspace_log.py

    Navegue a través de los diferentes espacios de trabajo y abra el archivo ~/viewport_log.txtpara ver el resultado (alternativamente, ejecútelo en una terminal cat ~/viewport_log.txtpara una lectura conveniente, ya que el registro se actualiza una vez por segundo).

  3. Si todo funciona como se espera, agregue el comando a sus aplicaciones de inicio. Dado que lo más probable es que se bloquee si el script se inicia demasiado pronto (antes de que el escritorio esté completamente cargado), es probable que deba agregar un pequeño salto en el comando de inicio para que funcione como una aplicación de inicio, por lo que el comando es:

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

    Para agregarlo a las Aplicaciones de inicio: Tablero> Aplicaciones de inicio> Agregar y agregue el comando.

La secuencia de comandos

import subprocess
import os
import time

# define / clear log file
home = os.environ["HOME"]
logfile = home+"/"+"viewport_log.txt"
open(logfile, "wt").write("")
vplist = []

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def get_dt():
    # get the current viewport
    res = get_res()
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

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)

current_time1 = float(time.time())
curr_dt1 = get_dt()

while True:
    time.sleep(2)
    curr_dt2 = get_dt()
    if curr_dt2 == curr_dt1:
        current_time2 = float(time.time())
        span = current_time2-current_time1
        vp = "workspace "+curr_dt1+" . "*10
        vplist.sort(key=lambda x: x[0])
        if not vp in [v[0] for v in vplist]:
            vplist.append([vp, span])
        else: 
            index = vplist.index([vplist[i] for i in range(len(vplist)) if vplist[i][0] == vp][0])
            vplist[index][1] = float(vplist[index][1])+span
        with open(logfile, "wt") as out:
            for item in vplist:
                out.write(item[0]+" "+time_format(item[1])+"\n")
    current_time1 = current_time2
    curr_dt1 = curr_dt2

Propiedades del guion

El script calcula el lapso de tiempo exacto entre dos momentos con los espacios de trabajo utilizados de esos momentos (2 segundos como es, el intervalo en la línea time.sleep(2) ) si los espacios de trabajo en ambos momentos son iguales, el tiempo se agrega al total de espacio de trabajo correspondiente tiempo de uso.

Si los espacios de trabajo en ambos momentos son diferentes, está claro que hubo un cambio de espacio de trabajo y el tiempo se agrega al tiempo productivo de ningún espacio de trabajo; Por lo tanto, el tiempo en la vista general en ~/viewport_log.txtse redondea a dos segundos por período por espacio de trabajo.

Editar

Al ejecutar el script anterior en segundo plano, puede ver los tiempos de uso actuales por espacio de trabajo colocando el script a continuación bajo una combinación de teclas:

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. Copie el script en un archivo vacío, guárdelo como view_vplog.sh
  2. Ejecútelo, mientras el primer script se ejecuta en segundo plano , mediante el comando:

    sh /path/to/view_vplog.sh
  3. Póngalo a disposición (después de la prueba) con una combinación de teclas de acceso directo: elija: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando a la combinación de teclas que elija.

    ingrese la descripción de la imagen aquí

Jacob Vlijm
fuente
1
@AB ¡Gracias! Me gustan este tipo de preguntas :)
Jacob Vlijm
¡Guauu! ¡Votado y se instalará mañana! (demasiado cansado para hacerlo ahora)
Fabby