Có phần mềm nào theo dõi thời gian sử dụng cửa sổ và ứng dụng không?


10

Có phần mềm nào giữ thời gian cho các hoạt động của tôi và báo cáo không? Dựa trên tiêu đề cửa sổ và cửa sổ tập trung. Báo cáo sẽ chỉ hiển thị thời gian dành cho cửa sổ cụ thể và tiêu đề của nó như:

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

1
Có một trình theo dõi thời gian trong trung tâm phần mềm thực hiện việc này
Mateo

1
Điều này có thể được thực hiện cực kỳ dễ dàng với các chương trình có sẵn - không cho phép tạo động lực cho việc này, tôi đã sử dụng một chương trình như vậy để ghi lại thời gian của riêng tôi vào một dự án trước đây. Điều này chắc chắn không nằm trong danh mục "quá rộng"
Mateo

Dù bằng cách nào, tôi không hiểu tại sao câu hỏi này bị đánh giá thấp. Đó là một câu hỏi bình thường và rõ ràng. Tôi không thấy cảnh báo "chỉ hỏi câu hỏi không ai biết câu trả lời" ở bất cứ đâu trên trang web.
Jacob Vlijm

Xin chào Ambi. Đăng câu trả lời của tôi. Xin vui lòng cho tôi biết nếu bạn quản lý!
Jacob Vlijm

Có thể mô tả của tôi không đúng - tôi không muốn theo dõi bất cứ ai trừ tôi. Tôi muốn có một số liệu thống kê về những gì tôi đã lãng phí thời gian của tôi. Tôi đã kiểm tra 'Tổng quan theo dõi thời gian' và 'Trình theo dõi thời gian GTimeLog' nhưng ở đó bạn cần nhập mọi thứ theo cách thủ công - điều mà tôi không muốn làm. Jacob Vlijm, cảm ơn bạn, đó chính xác là những gì tôi đang tìm kiếm ngoại trừ tôi nghĩ rằng có một phần mềm như thế với GUI
ambi

Câu trả lời:


7

EDIT: một phiên bản của tập lệnh với các báo cáo được sắp xếp có thể được tìm thấy ở đây


Luôn luôn vui vẻ để viết một kịch bản cho nó!

Kịch bản dưới đây sẽ tạo ra một đầu ra (báo cáo) như:

------------------------------------------------------------
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
============================================================


.. những gì được cập nhật một lần mỗi phút.

Ghi chú

  • Báo cáo có thể sẽ báo cáo các cửa sổ trong danh mục: "Không biết". Đây là trường hợp khi các cửa sổ có pid 0( tkintercửa sổ, chẳng hạn như Idlecửa sổ, PythonIDE). Tiêu đề cửa sổ và cách sử dụng của họ sẽ được báo cáo chính xác tuy nhiên.

  • Màn hình khóa với đầu vào mật khẩu được báo cáo là "cửa sổ nhập nux".

  • Tỷ lệ phần trăm là tỷ lệ phần trăm được làm tròn , đôi khi có thể dẫn đến sự khác biệt nhỏ giữa tỷ lệ phần trăm của ứng dụng và tổng tỷ lệ phần trăm của cửa sổ.

    Ví dụ: Nếu một ứng dụng có hai cửa sổ được sử dụng, mỗi cửa sổ được sử dụng 0,7%trong tổng thời gian, cả hai cửa sổ sẽ báo cáo 1%từng ( 0.7-> làm tròn thành 1), trong khi báo cáo sử dụng của ứng dụng 1%( 1.4-> làm tròn đến 1)

    Không cần phải nói rằng những khác biệt này là hoàn toàn không liên quan trong toàn bộ bức tranh.

Kịch bản

#!/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

Làm thế nào để thiết lập

  1. Kịch bản cần xdotoollấy thông tin của cửa sổ

    sudo apt-get install xdotool
  2. Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng window_logs.py

  3. Kiểm tra- chạy tập lệnh: khởi động tập lệnh bằng lệnh (từ thiết bị đầu cuối):

    python3 /path/to/window_logs.py

    Sau một phút, tập lệnh tạo một tệp nhật ký với kết quả đầu tiên ~/.usagelogs. Các tập tin được đóng dấu thời gian với ngày & thời gian tạo. Các tập tin được cập nhật một lần mỗi phút.

    Ở dưới cùng của tệp, bạn có thể thấy cả thời gian bắt đầu và dấu thời gian của lần chỉnh sửa mới nhất. Bằng cách này, bạn luôn có thể thấy khoảng thời gian của tệp là gì.

    Nếu tập lệnh khởi động lại, một tệp mới có dấu thời gian (bắt đầu) mới sẽ được tạo.

  4. Nếu tất cả đều hoạt động tốt, hãy thêm vào Ứng dụng khởi động: Dash> Ứng dụng khởi động> Thêm. Thêm lệnh:

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

Thêm ghi chú

  • ~/.uselogslà một thư mục ẩn theo mặc định. Nhấn (trong nautilus) Ctrl+ Hđể hiển thị.
  • Như vậy, kịch bản làm tròn tính linh hoạt của cửa sổ trong 5 giây, giả sử ít hơn 5 giây không thực sự sử dụng cửa sổ. Nếu bạn muốn thay đổi giá trị, hãy đặt nó vào phần đầu của tập lệnh trong dòng:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • Kịch bản cực kỳ "ít nước ép". Hơn nữa, vì các cập nhật thời gian trên mỗi cửa sổ được thực hiện bên trong tập lệnh, nên số lượng dòng trong tệp nhật ký được giới hạn ở số lượng cửa sổ thực tế được sử dụng.

    Tuy nhiên, tôi sẽ không chạy tập lệnh trong nhiều tuần liên tiếp, ví dụ, để ngăn việc tích lũy quá nhiều dòng (= bản ghi cửa sổ) để duy trì.


1
Chính xác những gì tôi đang tìm kiếm ngoại trừ việc có GUI cũng tốt nhưng tôi có thể tự làm điều đó. Cảm ơn bạn.
ambi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.