Stopwatch Workspace?

13

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.

Gazorpazorp
sumber
Apakah Anda menggunakan Unity?
Jacob Vlijm
Manajer desktop mana yang Anda gunakan?
David Foerster
1
ya, saya Menggunakan Unity.
Gazorpazorp

Jawaban:

11

Pertanyaan bagus!

Script di bawah ini membuat file log: ~/viewport_log.txtdi 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.

Cara Penggunaan

Script menggunakan wmctrl -dperintah untuk mendapatkan data viewport saat ini, jadi Anda harus menginstalnya terlebih dahulu:

sudo apt-get install wmctrl

Kemudian:

  1. Salin skrip di bawah ini ke file kosong, simpan sebagai workspace_log.py
  2. Tes-jalankan dengan perintah:

    python3 /path/to/workspace_log.py

    Menavigasi melalui ruang kerja yang berbeda dan buka file ~/viewport_log.txtuntuk melihat hasilnya (sebagai alternatif, jalankan di terminal cat ~/viewport_log.txtuntuk membaca nyaman, karena log diperbarui sekali per detik).

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

Naskah

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

Properti skrip

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.txtOleh karena itu waktu dalam ikhtisar dalam dibulatkan menjadi dua detik per periode per ruang kerja.

Edit

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"
  1. Salin skrip ke file kosong, simpan sebagai view_vplog.sh
  2. Jalankan, saat skrip pertama berjalan di latar belakang , dengan perintah:

    sh /path/to/view_vplog.sh
  3. Jadikan tersedia (setelah pengujian) dengan kombinasi tombol pintas: pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah ke kombinasi tombol pilihan Anda.

    masukkan deskripsi gambar di sini

Yakub Vlijm
sumber
1
@ AB Terima kasih! Saya suka pertanyaan semacam ini :)
Jacob Vlijm
Wow! Dirubah dan akan dipasang besok! (terlalu lelah untuk melakukannya sekarang)
Fabby