Чи існує програма, яка може слугувати секундоміром, що залежить від робочої області? Мені хотілося б знати, скільки часу я проводив у кожному робочому просторі щодня.
Редагувати: я використовую Unity.
Чи існує програма, яка може слугувати секундоміром, що залежить від робочої області? Мені хотілося б знати, скільки часу я проводив у кожному робочому просторі щодня.
Редагувати: я використовую Unity.
Відповіді:
Приємне запитання!
Сценарій нижче створює файл журналу: ~/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
Потім:
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"
Щоб додати його до програм запуску: Даш> Програми запуску> Додати та додайте команду.
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"
view_vplog.sh
Запустіть його, поки перший сценарій працює у фоновому режимі , командою:
sh /path/to/view_vplog.sh
Зробіть його доступним (після тестування) за допомогою комбінації клавіш: виберіть: Налаштування системи> "Клавіатура"> "Ярлики"> "Спеціальні ярлики". Клацніть "+" і додайте команду до комбінації клавіш на ваш вибір.