Arbeitsbereich Stoppuhr?


Antworten:


11

Gute Frage!

Das folgende Skript erstellt eine Protokolldatei: ~/viewport_log.txtIn Ihrem Ausgangsverzeichnis, in der die Nutzungszeit des Ansichtsfensters (Arbeitsbereichs) der aktuellen Sitzung pro Ansichtsfenster angegeben wird.

Der Bericht wird alle zwei Sekunden wie folgt aktualisiert:

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

im Format

hours:minutse:seconds

Wie Sie sehen, habe ich nur die Arbeitsbereiche 1, 2, 6 und 8 verwendet.

Wie benutzt man

Das Skript verwendet den wmctrl -dBefehl, um die aktuellen Ansichtsfensterdaten abzurufen. Sie müssen sie also zuerst installieren:

sudo apt-get install wmctrl

Dann:

  1. Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es unter workspace_log.py
  2. Führen Sie es mit dem folgenden Befehl aus:

    python3 /path/to/workspace_log.py

    Navigieren Sie durch die verschiedenen Arbeitsbereiche und öffnen Sie die Datei ~/viewport_log.txt, um das Ergebnis anzuzeigen (alternativ können Sie sie cat ~/viewport_log.txtzum bequemen Lesen in einem Terminal ausführen , da das Protokoll einmal pro Sekunde aktualisiert wird).

  3. Wenn alles wie erwartet funktioniert, fügen Sie den Befehl Ihren Startanwendungen hinzu. Da es höchstwahrscheinlich abstürzt, wenn das Skript zu früh gestartet wird (bevor der Desktop vollständig geladen ist), müssen Sie wahrscheinlich eine kleine Unterbrechung im Startbefehl hinzufügen, damit es als Startanwendung funktioniert. Der Befehl lautet dann also:

    /bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"

    So fügen Sie es zu Startup Applications hinzu: Dash> Startup Applications> Add, und fügen Sie den Befehl hinzu.

Das Drehbuch

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

Eigenschaften des Skripts

Das Skript berechnet die genaue Zeitspanne zwischen zwei Momenten anhand der verwendeten Arbeitsbereiche dieser Momente (2 Sekunden, das Intervall in der Zeile time.sleep(2)). Wenn die Arbeitsbereiche zu beiden Zeitpunkten gleich sind, wird die Zeit zur Gesamtsumme des entsprechenden Arbeitsbereichs addiert Nutzungszeit.

Wenn die Arbeitsbereiche in beiden Momenten unterschiedlich sind, wurde der Arbeitsbereich gewechselt, und die Zeit wird zur produktiven Zeit eines Arbeitsbereichs hinzugefügt. Die Zeit in der Übersicht in ~/viewport_log.txtwird daher auf zwei Sekunden pro Periode pro Arbeitsbereich gerundet.

Bearbeiten

Wenn Sie das Skript oben im Hintergrund ausführen, können Sie die aktuelle (n) Nutzungszeit (en) pro Arbeitsbereich anzeigen, indem Sie das folgende Skript unter eine Tastenkombination stellen:

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter view_vplog.sh
  2. Führen Sie es mit dem folgenden Befehl aus , während das erste Skript im Hintergrund ausgeführt wird:

    sh /path/to/view_vplog.sh
  3. Stellen Sie es (nach dem Testen) mit einer Tastenkombination zur Verfügung: Wählen Sie: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl einer Tastenkombination Ihrer Wahl hinzu.

    Bildbeschreibung hier eingeben


1
@AB Vielen Dank! Ich mag diese Art von Fragen :)
Jacob Vlijm

Beeindruckend! Upvoted und wird morgen installiert! (zu müde, um es jetzt zu tun)
Fabby
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.