Çalışma Alanı Kronometre?


13

Çalışma alanına bağlı bir kronometre olarak kullanılabilecek bir program var mı? Her çalışma alanında her gün ne kadar zaman harcadığımı bilmek istiyorum.

Düzenleme: Unity kullanıyorum.


Unity kullanıyor musunuz?
Jacob Vlijm

Hangi masaüstü yöneticisini kullanıyorsunuz?
David Foerster

1
evet, Birlik kullanıyorum.
Gazorpazorp

Yanıtlar:


11

Güzel soru!

Aşağıdaki komut dosyası, bir günlük dosyası oluşturur: ~/viewport_log.txtana dizininizde, geçerli oturumun görünüm alanı (çalışma alanı) kullanım süresi başına görünüm rapor eder.

Rapor iki saniyede bir güncellenir (hızlı bir şekilde):

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

biçiminde

hours:minutse:seconds

Gördüğünüz gibi sadece 1, 2, 6 ve 8 çalışma alanlarını kullandım.

Nasıl kullanılır

Komut dosyası wmctrl -dgeçerli görünüm alanı verilerini almak için komutu kullanır , bu yüzden önce yüklemeniz gerekir:

sudo apt-get install wmctrl

Sonra:

  1. Aşağıdaki komut dosyasını boş bir dosyaya kopyalayın, workspace_log.py
  2. Komut ile test çalıştırın:

    python3 /path/to/workspace_log.py

    Farklı çalışma alanlarında gezinin ve dosyayı ~/viewport_log.txtgörmek için dosyayı açın (alternatif olarak, cat ~/viewport_log.txtgünlük okuma saniyede bir güncellendiğinden, rahat okuma için bir terminalde çalıştırın ).

  3. hepsi beklendiği gibi çalışıyorsa, komutu başlangıç ​​uygulamalarınıza ekleyin. Komut dosyası çok erken başlatılırsa (masaüstü tamamen yüklenmeden önce) büyük olasılıkla çökeceğinden, başlangıç ​​uygulaması olarak çalışmasını sağlamak için muhtemelen başlatma komutuna küçük bir mola eklemeniz gerekir, bu nedenle komut şu şekildedir:

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

    Başlangıç ​​Uygulamalarına eklemek için: Çizgi> Başlangıç ​​Uygulamaları> Ekle'yi seçin ve komutu ekleyin.

Senaryo

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

Komut dosyasının özellikleri

Komut dosyası iki anları arasında tam bir zaman süresi o anların kullanılan çalışma alanları (olduğu gibi 2 saniye doğrultusunda aralığı Icw hesaplar time.sleep(2)) her iki anları çalışma alanları aynı ise, zaman karşılık gelen çalışma eklenir toplam kullanım süresi.

Her iki andaki çalışma alanları farklıysa, bir çalışma alanı anahtarı olduğu ve zamanın hiçbir çalışma alanının üretken zamanına eklenmediği açıktır; genel ~/viewport_log.txtbakıştaki süre, çalışma alanı başına dönem başına iki saniyeye yuvarlanır.

Düzenle

Yukarıdaki betiği arka planda çalıştırarak, aşağıdaki betiği bir tuş kombinasyonunun altına koyarak çalışma alanı başına geçerli kullanım saatlerini görebilirsiniz:

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. Komut dosyasını boş bir dosyaya kopyalayın, view_vplog.sh
  2. Bunu çalıştır ilk komut arka planda çalışırken komutla,:

    sh /path/to/view_vplog.sh
  3. Kısayol tuşu kombinasyonu ile (test ettikten sonra) kullanıma sunun: şunu seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve komutu istediğiniz tuş kombinasyonuna ekleyin.

    resim açıklamasını buraya girin


1
@AB Teşekkür ederim! Bu tür soruları seviyorum :)
Jacob Vlijm

Vaov! Oy verildi ve yarın kurulacak! (şimdi yapmak için çok yorgun)
Fabby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.