작업 공간 스톱워치?


13

작업 공간에 의존하는 스톱워치 역할을 할 수있는 프로그램이 있습니까? 매일 각 작업 공간에서 얼마나 많은 시간을 보냈는지 알고 싶습니다.

편집 : 나는 Unity를 사용하고 있습니다.


Unity를 사용하고 있습니까?
Jacob Vlijm

어떤 데스크톱 관리자를 사용하고 있습니까?
David Foerster

1
예, 저는 Unity를 사용하고 있습니다.
Gazorpazorp

답변:


11

좋은 질문!

아래 스크립트는 ~/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

그때:

  1. 아래 스크립트를 빈 파일로 복사하여 다른 이름으로 저장하십시오. workspace_log.py
  2. 다음 명령으로 테스트를 실행하십시오.

    python3 /path/to/workspace_log.py

    다른 작업 공간을 탐색하고 파일 ~/viewport_log.txt을 열어 결과를 확인하십시오 (또는 cat ~/viewport_log.txt로그가 초당 한 번 업데이트되므로 편리하게 읽기 위해 터미널에서 실행 ).

  3. 모든 것이 예상대로 작동하면 시작 응용 프로그램에 명령을 추가하십시오. 스크립트가 너무 일찍 시작되면 (데스크톱이 완전히로드되기 전에) 충돌이 발생할 가능성이 크므로 시작 응용 프로그램으로 작동하려면 시작 명령에 약간의 중단을 추가해야합니다. 따라서 명령은 다음과 같습니다.

    /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"
  1. 스크립트를 빈 파일로 복사하여 다른 이름으로 저장하십시오. view_vplog.sh
  2. 그것을 실행 첫 번째 스크립트는 백그라운드에서 실행되는 동안 명령에 의해, :

    sh /path/to/view_vplog.sh
  3. 바로 가기 키 조합으로 테스트 후 사용 가능하게하십시오 : 시스템 설정> "키보드"> "바로 가기"> "사용자 정의 바로 가기"를 선택하십시오. "+"를 클릭하고 선택한 키 조합에 명령을 추가하십시오.

    여기에 이미지 설명을 입력하십시오


1
@AB Thank you! 나는 이런 종류의 질문을 좋아한다 :)
Jacob Vlijm

와! 공감하고 내일 설치됩니다! (지금 너무 피곤해)
Fabby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.