Đồng hồ bấm giờ không gian làm việc?


13

Có một chương trình có thể phục vụ như một đồng hồ bấm giờ phụ thuộc vào không gian làm việc? Tôi muốn biết tôi đã dành bao nhiêu thời gian cho mỗi không gian làm việc mỗi ngày.

Chỉnh sửa: Tôi đang sử dụng Unity.


Bạn đang sử dụng Unity?
Jacob Vlijm

Bạn đang sử dụng trình quản lý máy tính để bàn nào?
David foerster

1
vâng, tôi đang sử dụng Unity.
Gazorpazorp

Câu trả lời:


11

Câu hỏi hay!

Kịch bản bên dưới tạo ra một logfile: ~/viewport_log.txttrong thư mục chính của bạn, nơi nó báo cáo thời gian sử dụng của chế độ xem (không gian làm việc) của phiên hiện tại trên mỗi chế độ xem.

Báo cáo được cập nhật một lần trong hai giây, trông giống như (trong một lần chạy nhanh):

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

trong định dạng

hours:minutse:seconds

Như bạn thấy, tôi chỉ sử dụng không gian làm việc 1, 2, 6 và 8.

Cách sử dụng

Kịch bản sử dụng wmctrl -dlệnh để lấy dữ liệu chế độ xem hiện tại, vì vậy bạn cần cài đặt nó trước:

sudo apt-get install wmctrl

Sau đó:

  1. Sao chép tập lệnh bên dưới vào một tập tin trống, lưu nó dưới dạng workspace_log.py
  2. Chạy thử nó bằng lệnh:

    python3 /path/to/workspace_log.py

    Điều hướng qua các không gian làm việc khác nhau và mở tệp ~/viewport_log.txtđể xem kết quả (cách khác, chạy trong một thiết bị đầu cuối cat ~/viewport_log.txtđể đọc thuận tiện, vì nhật ký được cập nhật một lần mỗi giây).

  3. nếu tất cả hoạt động như mong đợi, hãy thêm lệnh vào các ứng dụng khởi động của bạn. Vì rất có thể nó sẽ bị sập nếu tập lệnh được khởi động quá sớm (trước khi máy tính để bàn được tải đầy đủ), có lẽ bạn cần thêm một chút ngắt trong lệnh khởi động để làm cho nó hoạt động như một ứng dụng khởi động, vì vậy lệnh sau đó là:

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

    Để thêm nó vào Ứng dụng khởi động: Dash> Ứng dụng khởi động> Thêm và thêm lệnh.

Kịch bản

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

Thuộc tính của tập lệnh

Kịch bản tính toán khoảng thời gian chính xác giữa hai khoảnh khắc với không gian làm việc được sử dụng của những khoảnh khắc đó (2 giây, khoảng thời gian trong dòng time.sleep(2)) nếu không gian làm việc trên cả hai khoảnh khắc là như nhau, tổng thời gian được thêm vào tổng số không gian làm việc tương ứng thời gian sử dụng.

Nếu không gian làm việc trên cả hai thời điểm là khác nhau, rõ ràng đã có một công tắc không gian làm việc và thời gian được thêm vào để không có thời gian sản xuất của không gian làm việc; do đó, thời gian trong tổng quan trong ~/viewport_log.txtdo đó được làm tròn thành hai giây mỗi khoảng thời gian trên mỗi không gian làm việc.

Biên tập

Chạy tập lệnh ở trên trong nền, bạn có thể xem (các) thời gian sử dụng hiện tại trên mỗi không gian làm việc bằng cách đặt tập lệnh bên dưới dưới tổ hợp phím:

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng view_vplog.sh
  2. Chạy nó, trong khi tập lệnh đầu tiên đang chạy trong nền , bằng lệnh:

    sh /path/to/view_vplog.sh
  3. Làm cho nó khả dụng (sau khi thử nghiệm) bằng tổ hợp phím tắt: chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh vào tổ hợp phím bạn chọn.

    nhập mô tả hình ảnh ở đây


1
@AB Cảm ơn bạn! Tôi thích loại câu hỏi này :)
Jacob Vlijm

Ồ Nâng cấp và sẽ được cài đặt vào ngày mai! (quá mệt mỏi để làm điều đó bây giờ)
Fabby
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.