Gibt es ein Programm, das als arbeitsplatzabhängige Stoppuhr dienen kann? Ich würde gerne wissen, wie viel Zeit ich jeden Tag in jedem Arbeitsbereich verbracht habe.
Bearbeiten: Ich benutze Unity.
Gibt es ein Programm, das als arbeitsplatzabhängige Stoppuhr dienen kann? Ich würde gerne wissen, wie viel Zeit ich jeden Tag in jedem Arbeitsbereich verbracht habe.
Bearbeiten: Ich benutze Unity.
Antworten:
Gute Frage!
Das folgende Skript erstellt eine Protokolldatei: ~/viewport_log.txt
In 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.
Das Skript verwendet den wmctrl -d
Befehl, um die aktuellen Ansichtsfensterdaten abzurufen. Sie müssen sie also zuerst installieren:
sudo apt-get install wmctrl
Dann:
workspace_log.py
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.txt
zum bequemen Lesen in einem Terminal ausführen , da das Protokoll einmal pro Sekunde aktualisiert wird).
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.
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
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.txt
wird daher auf zwei Sekunden pro Periode pro Arbeitsbereich gerundet.
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"
view_vplog.sh
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
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.