Esiste un programma che può fungere da cronometro dipendente dallo spazio di lavoro? Mi piacerebbe sapere quanto tempo ho trascorso in ogni area di lavoro ogni giorno.
Modifica: sto usando Unity.
Esiste un programma che può fungere da cronometro dipendente dallo spazio di lavoro? Mi piacerebbe sapere quanto tempo ho trascorso in ogni area di lavoro ogni giorno.
Modifica: sto usando Unity.
Risposte:
Bella domanda!
Lo script seguente crea un file di registro: ~/viewport_log.txt
nella tua home directory, dove riporta il tempo di utilizzo del viewport (area di lavoro) della sessione corrente per viewport.
Il rapporto viene aggiornato una volta ogni due secondi, simile a (in una breve sequenza):
workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05
nel formato
hours:minutse:seconds
Come puoi vedere, ho usato solo l'area di lavoro 1, 2, 6 e 8.
Lo script utilizza il wmctrl -d
comando per ottenere i dati della finestra corrente, quindi è necessario installarlo prima:
sudo apt-get install wmctrl
Poi:
workspace_log.py
Test-eseguirlo con il comando:
python3 /path/to/workspace_log.py
Navigare attraverso le diverse aree di lavoro e aprire il file ~/viewport_log.txt
per vedere il risultato (in alternativa, eseguire in un terminale cat ~/viewport_log.txt
per una lettura comoda, poiché il registro viene aggiornato una volta al secondo).
se tutto funziona come previsto, aggiungi il comando alle tue applicazioni di avvio. Poiché molto probabilmente si arresterà in modo anomalo se lo script viene avviato troppo presto (prima che il desktop sia completamente caricato), probabilmente è necessario aggiungere una piccola interruzione nel comando di avvio per farlo funzionare come applicazione di avvio, quindi il comando è:
/bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"
Per aggiungerlo alle applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi e aggiungi il comando.
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
Lo script calcola l'intervallo di tempo esatto tra due momenti tra le aree di lavoro utilizzate di quei momenti (2 secondi così com'è, l'intervallo nella linea time.sleep(2)
) se le aree di lavoro in entrambi i momenti sono uguali, il tempo viene aggiunto al totale dello spazio di lavoro corrispondente tempo di utilizzo.
Se le aree di lavoro in entrambi i momenti sono diverse, è chiaro che c'era un cambio di area di lavoro e che il tempo viene aggiunto al tempo produttivo di nessuna area di lavoro; il tempo nella panoramica in ~/viewport_log.txt
è quindi arrotondato a due secondi per periodo per area di lavoro.
Eseguendo lo script sopra in background, è possibile visualizzare i tempi di utilizzo correnti per area di lavoro inserendo lo script di seguito in una combinazione di tasti:
#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
view_vplog.sh
Eseguilo, mentre il primo script è in esecuzione in background , con il comando:
sh /path/to/view_vplog.sh
Renderlo disponibile (dopo il test) con una combinazione di tasti di scelta rapida: scegliere: Impostazioni di sistema> "Tastiera"> "Collegamenti"> "Collegamenti personalizzati". Fai clic su "+" e aggiungi il comando a una combinazione di tasti a tua scelta.