Секундомір робочої області?


13

Чи існує програма, яка може слугувати секундоміром, що залежить від робочої області? Мені хотілося б знати, скільки часу я проводив у кожному робочому просторі щодня.

Редагувати: я використовую Unity.


Ви використовуєте 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"

    Щоб додати його до програм запуску: Даш> Програми запуску> Додати та додайте команду.

Сценарій

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

Властивості сценарію

Сценарій обчислює точний проміжок часу між двома моментами icw використаними робочими просторами цих моментів (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 Дякую! Мені подобаються подібні запитання :)
Яків Влійм,

Оце Так! Оновлено та буде встановлено завтра! (занадто втомився, щоб це робити зараз)
Fabby
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.