작업 공간에 의존하는 스톱워치 역할을 할 수있는 프로그램이 있습니까? 매일 각 작업 공간에서 얼마나 많은 시간을 보냈는지 알고 싶습니다.
편집 : 나는 Unity를 사용하고 있습니다.
작업 공간에 의존하는 스톱워치 역할을 할 수있는 프로그램이 있습니까? 매일 각 작업 공간에서 얼마나 많은 시간을 보냈는지 알고 싶습니다.
편집 : 나는 Unity를 사용하고 있습니다.
답변:
좋은 질문!
아래 스크립트는 ~/viewport_log.txt
홈 디렉토리에 로그 파일을 생성합니다. 여기에서 뷰포트 당 현재 세션의 뷰포트 (작업 공간) 사용 시간을보고합니다.
보고서는 다음과 같이 2 초마다 한 번씩 업데이트됩니다 (빠른 실행).
workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05
형식으로
hours:minutse:seconds
보시다시피, 나는 작업 공간 1, 2, 6 및 8 만 사용했습니다.
스크립트는 wmctrl -d
명령을 사용하여 현재 뷰포트 데이터를 가져 오므로 먼저 설치해야합니다.
sudo apt-get install wmctrl
그때:
workspace_log.py
다음 명령으로 테스트를 실행하십시오.
python3 /path/to/workspace_log.py
다른 작업 공간을 탐색하고 파일 ~/viewport_log.txt
을 열어 결과를 확인하십시오 (또는 cat ~/viewport_log.txt
로그가 초당 한 번 업데이트되므로 편리하게 읽기 위해 터미널에서 실행 ).
모든 것이 예상대로 작동하면 시작 응용 프로그램에 명령을 추가하십시오. 스크립트가 너무 일찍 시작되면 (데스크톱이 완전히로드되기 전에) 충돌이 발생할 가능성이 크므로 시작 응용 프로그램으로 작동하려면 시작 명령에 약간의 중단을 추가해야합니다. 따라서 명령은 다음과 같습니다.
/bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"
시작 응용 프로그램에 추가하려면 Dash> 시작 응용 프로그램> 추가를 클릭하고 명령을 추가하십시오.
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
스크립트는 두 개의 순간 사이의 정확한 시간 범위는 그 순간의 사용되는 작업 영역 (그대로 2 초, 라인의 간격 ICW 계산 time.sleep(2)
) 모두 순간에 작업 공간이 동일하면, 시간이 해당 작업 영역에 추가된다 '총 사용 시간.
두 순간의 작업 공간이 다른 경우 작업 공간 전환이 있고 시간이 작업 공간의 생산 시간에 추가되지 않은 것이 분명합니다. ~/viewport_log.txt
따라서 개요의 시간은 작업 공간 당 기간 당 2 초로 반올림됩니다.
백그라운드에서 위의 스크립트를 실행하면 아래 스크립트를 키 조합으로 지정하여 작업 공간 당 현재 사용 시간을 볼 수 있습니다.
#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
view_vplog.sh
그것을 실행 첫 번째 스크립트는 백그라운드에서 실행되는 동안 명령에 의해, :
sh /path/to/view_vplog.sh
바로 가기 키 조합으로 테스트 후 사용 가능하게하십시오 : 시스템 설정> "키보드"> "바로 가기"> "사용자 정의 바로 가기"를 선택하십시오. "+"를 클릭하고 선택한 키 조합에 명령을 추가하십시오.