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.
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.
Réponses:
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.
Le script utilise la wmctrl -d
commande pour obtenir les données actuelles de la fenêtre, vous devez donc d'abord l'installer:
sudo apt-get install wmctrl
Alors:
workspace_log.py
Testez-le par la commande:
python3 /path/to/workspace_log.py
Parcourez les différents espaces de travail et ouvrez le fichier ~/viewport_log.txt
pour voir le résultat (sinon, exécutez-le dans un terminal cat ~/viewport_log.txt
pour une lecture 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. 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.
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 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.txt
est donc arrondi à deux secondes par période par espace de travail.
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"
view_vplog.sh
Exécutez-le, pendant que le premier script s'exécute en arrière-plan , par 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.