Apakah ada program yang dapat berfungsi sebagai stopwatch yang bergantung pada ruang kerja? Saya ingin tahu berapa banyak waktu yang saya habiskan di setiap ruang kerja setiap hari.
Sunting: Saya menggunakan Unity.
Apakah ada program yang dapat berfungsi sebagai stopwatch yang bergantung pada ruang kerja? Saya ingin tahu berapa banyak waktu yang saya habiskan di setiap ruang kerja setiap hari.
Sunting: Saya menggunakan Unity.
Jawaban:
Pertanyaan bagus!
Script di bawah ini membuat file log: ~/viewport_log.txt
di direktori home Anda, di mana ia melaporkan viewport (workspace) sesi saat ini penggunaan per viewport.
Laporan ini diperbarui sekali per dua detik, terlihat seperti (dalam menjalankan cepat):
workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05
dalam format
hours:minutse:seconds
Seperti yang Anda lihat, saya hanya menggunakan ruang kerja 1, 2, 6 dan 8.
Script menggunakan wmctrl -d
perintah untuk mendapatkan data viewport saat ini, jadi Anda harus menginstalnya terlebih dahulu:
sudo apt-get install wmctrl
Kemudian:
workspace_log.py
Tes-jalankan dengan perintah:
python3 /path/to/workspace_log.py
Menavigasi melalui ruang kerja yang berbeda dan buka file ~/viewport_log.txt
untuk melihat hasilnya (sebagai alternatif, jalankan di terminal cat ~/viewport_log.txt
untuk membaca nyaman, karena log diperbarui sekali per detik).
jika semua berfungsi seperti yang diharapkan, tambahkan perintah ke aplikasi startup Anda. Karena kemungkinan besar macet jika skrip dimulai terlalu dini (sebelum desktop dimuat penuh), Anda mungkin perlu menambahkan jeda kecil pada perintah startup untuk membuatnya berfungsi sebagai aplikasi startup, jadi perintahnya adalah:
/bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"
Untuk menambahkannya ke Aplikasi Startup: Dash> Startup Applications> Add, dan tambahkan perintah.
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
Script menghitung rentang waktu yang tepat antara dua momen dengan ruang kerja yang digunakan saat itu (2 detik seperti itu, interval dalam garis time.sleep(2)
) jika ruang kerja pada kedua momen adalah sama, waktu ditambahkan ke total ruang kerja yang sesuai ' waktu yang terpakai.
Jika ruang kerja di kedua momen berbeda, jelas bahwa ada pergantian ruang kerja dan waktu ditambahkan ke waktu produktif ruang kerja; ~/viewport_log.txt
Oleh karena itu waktu dalam ikhtisar dalam dibulatkan menjadi dua detik per periode per ruang kerja.
Menjalankan skrip di atas di latar belakang, Anda dapat melihat waktu penggunaan saat ini per ruang kerja dengan meletakkan skrip di bawah ini di bawah kombinasi kunci:
#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
view_vplog.sh
Jalankan, saat skrip pertama berjalan di latar belakang , dengan perintah:
sh /path/to/view_vplog.sh
Jadikan tersedia (setelah pengujian) dengan kombinasi tombol pintas: pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah ke kombinasi tombol pilihan Anda.