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.
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.
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:
workspace_log.py
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).
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.
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
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.
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"
view_vplog.sh
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
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.