web-dev-qa-db-fra.com

Chronomètre d'espace de travail?

Existe-t-il un programme pouvant servir de chronomètre dépendant de l’espace de travail? J'aimerais savoir combien de temps j'ai passé dans chaque espace de travail chaque jour.

Edit: J'utilise Unity.

13
Gazorpazorp

Bonne question!

Le script ci-dessous crée un fichier journal: ~/viewport_log.txt dans votre répertoire de base, où il indique le temps d'utilisation de la fenêtre en cours (espace de travail) par fenêtre.

Le rapport est mis à jour une fois toutes les deux secondes et se présente comme suit:

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

dans le format

hours:minutse:seconds

Comme vous pouvez le constater, je n’ai utilisé que les espaces de travail 1, 2, 6 et 8.

Comment utiliser

Le script utilise la commande wmctrl -d pour obtenir les données actuelles de la fenêtre d'affichage. Vous devez donc d'abord l'installer:

Sudo apt-get install wmctrl

Ensuite:

  1. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom workspace_log.py
  2. Testez-le avec la commande:

    python3 /path/to/workspace_log.py
    

    Parcourez les différents espaces de travail et ouvrez le fichier ~/viewport_log.txt pour afficher le résultat (ou exécutez-le dans un terminal cat ~/viewport_log.txt pour une lecture plus pratique, car le journal est mis à jour une fois par seconde).

  3. si tout fonctionne comme prévu, ajoutez la commande à vos applications de démarrage. Etant donné que le script va probablement tomber en panne si le script est démarré trop tôt (avant que le bureau ne soit entièrement chargé), vous devrez probablement ajouter une petite pause dans la commande de démarrage pour le faire fonctionner comme une application de démarrage. La commande est alors la suivante:

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

    Pour l'ajouter aux applications de démarrage: Dash> Applications de démarrage> Ajouter, puis ajoutez la commande.

Le scénario

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

Propriétés du script

Le script calcule l'intervalle de temps exact entre deux moments i.c.w. les espaces de travail utilisés de ces moments (2 secondes, intervalle de la ligne time.sleep(2)) si les espaces de travail des deux moments sont identiques, le temps est ajouté au temps d'utilisation total de l'espace de travail correspondant.

Si les espaces de travail des deux moments sont différents, il est clair qu’il y avait un commutateur d’espace de travail et que le temps est ajouté au temps productif d’aucun espace de travail; l'heure dans la vue d'ensemble dans ~/viewport_log.txt est donc arrondie à deux secondes par période et par espace de travail.

Éditer

En exécutant le script ci-dessus en arrière-plan, vous pouvez afficher le temps d'utilisation actuel par espace de travail en plaçant le script ci-dessous sous une combinaison de touches:

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom view_vplog.sh
  2. Exécutez-le, lorsque le premier script est exécuté en arrière-plan, à l'aide de la commande:

    sh /path/to/view_vplog.sh
    
  3. Rendez-le disponible (après le test) avec une combinaison de touches de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande à une combinaison de touches de votre choix.

    enter image description here

11
Jacob Vlijm