GNU/Linux >> Belajar Linux >  >> Ubuntu

Apakah Ada Perangkat Lunak Yang Waktu-Melacak Jendela &Penggunaan Aplikasi?

Apakah ada perangkat lunak yang mengatur waktu aktivitas saya dan memberikan laporan?
Berdasarkan fokus jendela dan judul jendela.
Laporan hanya akan menunjukkan waktu yang dihabiskan untuk jendela tertentu dan judulnya seperti:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58

Jawaban yang Diterima:

EDIT:versi skrip dengan laporan yang diurutkan dapat ditemukan di sini

Selalu menyenangkan untuk menulis naskah untuk itu!

Script di bawah ini akan menghasilkan output (laporan) seperti:

------------------------------------------------------------
nautilus
0:00:05 (3%)
------------------------------------------------------------
   0:00:05 (3%)     .usagelogs
------------------------------------------------------------
firefox
0:01:10 (36%)
------------------------------------------------------------
   0:00:05 (3%)     The Asker or the Answerer? - Ask Ubuntu Meta - Mozilla Firefox
   0:00:15 (8%)     scripts - Is there software which time- tracks window & application usage? - Ask Ubuntu - Mozilla Firefox
   0:00:10 (5%)     Ask Ubuntu - Mozilla Firefox
   0:00:15 (8%)     Why is a one line non-understandable answer used as review audit? - Ask Ubuntu Meta - Mozilla Firefox
   0:00:20 (10%)    bash - How to detect the number of opened terminals by the user - Ask Ubuntu - Mozilla Firefox
   0:00:05 (3%)     BlueGriffon - Mozilla Firefox
------------------------------------------------------------
gedit
0:02:00 (62%)
------------------------------------------------------------
   0:02:00 (62%)    2016_06_04_10_33_29.txt (~/.usagelogs) - gedit

============================================================
started: 2016-06-04 10:33:29    updated: 2016-06-04 10:36:46
============================================================

..yang diperbarui sekali per menit.

Catatan

  • Laporan mungkin akan melaporkan jendela di bawah kategori:"Tidak diketahui". Ini adalah kasus ketika windows memiliki pid 0 (tkinter jendela, seperti Idle windows, sebuahPython IDE). Judul jendela dan penggunaannya akan dilaporkan dengan benar.

  • Layar kunci dengan input kata sandi dilaporkan sebagai “jendela input nux”.

  • Persentasenya dibulatkan persentase, yang terkadang dapat menyebabkan perbedaan kecil antara aplikasi persentase dan jumlah persentase jendelanya.

    Contoh:Jika sebuah aplikasi memiliki dua jendela yang digunakan, masing-masing menggunakan 0,7% dari total waktu, baik jendela akan melaporkan 1% masing-masing (0.7 –> dibulatkan menjadi 1 ), sedangkan aplikasi laporan penggunaan 1% (1.4 –> dibulatkan menjadi 1 )

    Tidak perlu dikatakan bahwa perbedaan ini sama sekali tidak relevan secara keseluruhan.

Skrip

#!/usr/bin/env python3
import subprocess
import time
import os

# -- set update/round time (seconds)
period = 5
# -- 
# don change anything below
home = os.environ["HOME"]
logdir = home+"/.usagelogs"

def currtime(tformat=None):
    return time.strftime("%Y_%m_%d_%H_%M_%S") if tformat == "file"\
           else time.strftime("%Y-%m-%d %H:%M:%S")

try:
    os.mkdir(logdir)
except FileExistsError:
    pass

# path to your logfile
log = logdir+"/"+currtime("file")+".txt"; startt = currtime()

def get(command):
    try:
        return subprocess.check_output(command).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

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)

def summarize():
    with open(log, "wt" ) as report:
        totaltime = sum([it[2] for it in winlist])
        report.write("")
        for app in applist:
            wins = [r for r in winlist if r[0] == app]
            apptime = sum([it[2] for it in winlist if it[0] == app])
            appperc = round(100*apptime/totaltime)
            report.write(("-"*60)+"\n"+app+"\n"+time_format(apptime)+\
                         " ("+str(appperc)+"%)\n"+("-"*60)+"\n")
            for w in wins:
                wperc = str(round(100*w[2]/totaltime))
                report.write("   "+time_format(w[2])+" ("+\
                             wperc+"%)"+(6-len(wperc))*" "+w[1]+"\n")
        report.write("\n"+"="*60+"\nstarted: "+startt+"\t"+\
                     "updated: "+currtime()+"\n"+"="*60)

t = 0; applist = []; winlist = []
while True:
    time.sleep(period)
    frpid = get(["xdotool", "getactivewindow", "getwindowpid"])
    frname = get(["xdotool", "getactivewindow", "getwindowname"])
    app = get(["ps", "-p", frpid, "-o", "comm="]) if frpid != None else "Unknown"
    # fix a few names
    if "gnome-terminal" in app:
        app = "gnome-terminal"
    elif app == "soffice.bin":
        app = "libreoffice"
    # add app to list
    if not app in applist:
        applist.append(app)
    checklist = [item[1] for item in winlist]
    if not frname in checklist:
        winlist.append([app, frname, 1*period])
    else:
        winlist[checklist.index(frname)][
            2] = winlist[checklist.index(frname)][2]+1*period
    if t == 60/period:
        summarize()
        t = 0
    else:
        t += 1

Cara menyiapkan

  1. Script membutuhkan xdotool untuk mendapatkan informasi jendela

    sudo apt-get install xdotool
    
  2. Salin skrip ke file kosong, simpan sebagai window_logs.py

  3. Uji- jalankan skrip:tart skrip dengan perintah (dari terminal):

    python3 /path/to/window_logs.py
    

    Setelah satu menit, skrip membuat file log dengan hasil pertama di ~/.usagelogs . File diberi cap waktu dengan tanggal &waktu pembuatan. File diperbarui sekali per menit.

    Di bagian bawah file, Anda dapat melihat waktu mulai dan stempel waktu dari hasil edit terbaru. Dengan cara ini Anda selalu dapat melihat rentang waktu file.

    Jika skrip dimulai ulang, file baru dengan stempel waktu (mulai) baru akan dibuat.

  4. Jika semua berfungsi dengan baik, tambahkan ke Aplikasi Startup:Dash> Startup Applications> Add. Tambahkan perintah:

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

Catatan lainnya

  • ~/.uselogs adalah direktori tersembunyi secara default. Tekan (di nautilus ) Ctrl +H untuk membuatnya terlihat.
  • Seperti itu, skrip membulatkan keaktifan jendela pada 5 detik, dengan asumsi kurang dari 5 detik tidak benar-benar menggunakan jendela. Jika Anda ingin mengubah nilainya, atur di kepala skrip di baris:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • Skripnya sangat "rendah jus". Selanjutnya, sejak waktu- update per jendela dilakukan di dalam skrip, jumlah baris dalam file log terbatas pada jumlah sebenarnya dari jendela yang digunakan.

    Namun demikian, saya tidak akan menjalankan skrip selama berminggu-minggu berturut-turut misalnya, untuk mencegah akumulasi terlalu banyak baris (=window record) untuk dipelihara.

Terkait:Bagaimana cara memahami konten variabel string?
Ubuntu
  1. Perangkat Lunak Mana yang Mengontrol Kipas di Dell Sputnik?

  2. Apakah Ada Perangkat Lunak yang Dapat Mengenali Not Musik Yang Saya Mainkan Ke Mikrofon – Untuk Membantu Saya Berlatih Musik?

  3. Judul aplikasi Qt

  1. 8 Perangkat Lunak Pemantauan Kinerja Aplikasi (APM) Sumber Terbuka Teratas untuk Visibilitas Lebih Baik

  2. Apakah ada perbedaan teknis yang membuat Linux kurang rentan terhadap virus dibandingkan Windows?

  3. Bagaimana cara membatasi penggunaan memori aplikasi?

  1. Ny Software Open Source Mirip Instagram?

  2. Perangkat Lunak Untuk Menemukan Penggunaan Daya Desktop?

  3. Bagaimana Cara Memutar Audio Lebih Cepat Tapi Tetap Pitch?