Cronometro dell'area di lavoro?


Risposte:


11

Bella domanda!

Lo script seguente crea un file di registro: ~/viewport_log.txtnella 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.

Come usare

Lo script utilizza il wmctrl -dcomando per ottenere i dati della finestra corrente, quindi è necessario installarlo prima:

sudo apt-get install wmctrl

Poi:

  1. Copia lo script seguente in un file vuoto, salvalo come workspace_log.py
  2. Test-eseguirlo con il comando:

    python3 /path/to/workspace_log.py

    Navigare attraverso le diverse aree di lavoro e aprire il file ~/viewport_log.txtper vedere il risultato (in alternativa, eseguire in un terminale cat ~/viewport_log.txtper una lettura comoda, poiché il registro viene aggiornato una volta al secondo).

  3. 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.

Il copione

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

Proprietà dello script

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.

modificare

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"
  1. Copia lo script in un file vuoto, salvalo come view_vplog.sh
  2. Eseguilo, mentre il primo script è in esecuzione in background , con il comando:

    sh /path/to/view_vplog.sh
  3. 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.

    inserisci qui la descrizione dell'immagine


1
@AB Grazie! Mi piacciono questo tipo di domande :)
Jacob Vlijm,

Wow! Eseguito l'upgrade e verrà installato domani! (troppo stanco per farlo ora)
Fabby
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.