Рабочая область Секундомер?

13

Есть ли программа, которая может служить зависимым от рабочей области секундомером? Я хотел бы знать, сколько времени я проводил в каждом рабочем месте каждый день.

Редактировать: я использую Unity.

Gazorpazorp
источник
Вы используете Unity?
Джейкоб Влейм
Какой менеджер рабочего стола вы используете?
Дэвид Фёрстер
1
да, я использую Unity.
Газорпазорп

Ответы:

11

Хороший вопрос!

Сценарий ниже создает файл журнала: ~/viewport_log.txtв вашем домашнем каталоге, где он сообщает о времени использования текущего сеанса просмотра (рабочее пространство) для каждого окна просмотра.

Отчет обновляется один раз в две секунды и выглядит примерно так:

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"

    Чтобы добавить его в Startup Applications: Dash> Startup Applications> Add и добавьте команду.

Сценарий

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 секунды, интервал в строке time.sleep(2)), если рабочие области в обоих моментах одинаковы, время добавляется к соответствующему рабочему пространству 'итого время использования.

Если рабочие области в оба момента различны, ясно, что произошел переход рабочей области, и время добавляется к производительному времени рабочей области; ~/viewport_log.txtпоэтому время в обзоре округляется до двух секунд за период для каждой рабочей области.

редактировать

Запустив приведенный выше сценарий в фоновом режиме, вы можете просмотреть текущее время использования каждого рабочего пространства, поместив приведенный ниже сценарий под комбинацию клавиш:

#!/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 Спасибо! Мне нравятся такие вопросы :)
Jacob Vlijm
Вот это да! Проголосовал и будет установлен завтра! (слишком устал, чтобы сделать это сейчас)
Fabby