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