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.
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.
Câu trả lời:
Câu hỏi hay!
Kịch bản bên dưới tạo ra một logfile: ~/viewport_log.txt
trong 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.
Kịch bản sử dụng wmctrl -d
lệ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 đó:
workspace_log.py
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).
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.
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
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.txt
do đó đượ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.
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"
view_vplog.sh
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
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.