Chronomètre d'espace de travail?

13

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

Edit: j'utilise Unity.

Gazorpazorp
la source
Utilisez-vous Unity?
Jacob Vlijm
Quel gestionnaire de bureau utilisez-vous?
David Foerster
1
oui, j'utilise Unity.
Gazorpazorp

Réponses:

11

Bonne question!

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

Le rapport est mis à jour une fois toutes les deux secondes, ressemblant à (dans une course rapide):

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

au format

hours:minutse:seconds

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

Comment utiliser

Le script utilise la wmctrl -dcommande pour obtenir les données actuelles de la fenêtre, vous devez donc d'abord l'installer:

sudo apt-get install wmctrl

Alors:

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

    python3 /path/to/workspace_log.py

    Parcourez les différents espaces de travail et ouvrez le fichier ~/viewport_log.txtpour voir le résultat (sinon, exécutez-le dans un terminal cat ~/viewport_log.txtpour une lecture 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. Comme il se bloquera très probablement si le script est démarré trop tôt (avant que le bureau ne soit complètement chargé), vous devrez probablement ajouter une petite pause dans la commande de démarrage pour le faire fonctionner comme une application de démarrage, donc la commande est alors:

    /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 et ajoutez la commande.

Le script

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 icw les espaces de travail utilisés de ces moments (2 secondes comme il est, l'intervalle dans la ligne time.sleep(2) ) si les espaces de travail sur les deux moments sont les mêmes, le temps est ajouté au total de l'espace de travail correspondant temps d'utilisation.

Si les espaces de travail sur les deux moments sont différents, il est clair qu'il y avait un commutateur d'espace de travail et le temps est ajouté au temps productif d'aucun espace de travail; le temps dans l'aperçu en ~/viewport_log.txtest donc arrondi à deux secondes par période par espace de travail.

Éditer

En exécutant le script ci-dessus en arrière-plan, vous pouvez afficher le ou les temps d'utilisation actuels 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 view_vplog.sh
  2. Exécutez-le, pendant que le premier script s'exécute en arrière-plan , par 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.

    entrez la description de l'image ici

Jacob Vlijm
la source
1
@AB Merci! J'aime ce genre de questions :)
Jacob Vlijm
Hou la la! A voté et sera installé demain! (trop fatigué pour le faire maintenant)
Fabby