Спосіб вимірювання використання комп'ютера за допомогою активного / неактивного часу заставки?


15

Я шукаю простий спосіб визначити приблизну кількість часу в день, який я проводжу за комп’ютером. Це може бути складним завданням, якщо ви намагаєтеся відстежувати процеси, натискання клавіш, клацання миші тощо, тому що можна робити що завгодно, роздумуючи над проблемою кодування, читаючи статтю в Інтернеті, розмовляючи по телефону або пішовши пішки собака. Комп'ютер не може прочитати мою думку. Оскільки я залишаю комп'ютери на цілодобовому моніторингу, вхід не працюватиме.

Я потрапив на думку про реєстрацію, скільки часу проводить комп’ютер у режимі заставки. Моя помилка тоді буде не більшою, ніж добуток заставки в режимі очікування до заставки, скільки разів він переходить у режим заставки. Віднімаючи це протягом 24 годин, я дав би мені оцінку, яка була б розумною для моїх цілей.

Проблема полягає в тому, що я не знаю, як увійти, коли заставка включається та вимикається. На даний момент я працюю на Ubuntu 10.10 на більшості машин, на деяких з них почати оновлення до 11.04.

Будь-які ідеї?

[редагувати] Після ще більш гуглів я натрапив на dbus-монітор, який виглядав так, як це може працювати, але не вистачає важливого інгредієнта. Ось сценарій, який я запускаю, який запускає монітор як демон:

#!/bin/bash
RUNNING=`ps -A | grep "dbus-monitor"`
if [ ! $RUNNING  ]; then
    echo "(Re)starting dbus-monitor daemon"
    nohup dbus-monitor "--profile" "type='signal',interface='org.gnome.ScreenSaver'" >> ${HOME}/sc.log &
fi

Ось вихід, який він отримує після блокування та розблокування екрана кілька разів:

sig     1304860712      153829  2       /org/freedesktop/DBus   org.freedesktop.DBus    NameAcquired
sig     1304860717      318732  462     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged
sig     1304860725      547928  463     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged
sig     1304861018      17      464     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged
sig     1304862919      403523  466     /org/gnome/ScreenSaver  org.gnome.ScreenSaver   ActiveChanged

Другий стовпець, очевидно, unix UTC за секунди. Пропавший інгредієнт - це те, що він не визначає, що заставка включена чи вимкнена! Я припускаю, що я можу припустити, що вони перемикаються з моменту, коли це відбудеться NameAcquired, але це робить мене легким, що може бути відсутня або додаткова подія, яку я не можу передбачити, що викине все з синхронізації.

Багато зобов’язаний за ідеї.

jkcunningham


Чи є інструменти управління часом, як хом'як, варіант?
Натан Осман

Я щойно його встановив. Незрозуміло, як вона буде справлятися з часом, я ще не спеціально входив у завдання, але це виглядає цікаво.
jkcunningham

У мене це вже півгодини або близько того, схоже, що потрібно запускати його щоразу. Це недолік. Я не намагаюся визначати час для, скажімо, цілей зарядки, просто часу, проведеного за комп’ютером. І якщо я забуду ввімкнути його, цей час буде не враховано. Я все ще граю з цим, хоча.
jkcunningham

1
Це дуже гарне питання щодо вимірювання часу на ПК. Дуже гарна ідея про заставку.
Луїс Альварадо

Перевірте це на github github.com/nitesh-/hoursboard . Це може відповісти на ваше запитання
Nitesh morajkar

Відповіді:


4

Хочу подякувати та доповнити простий, необроблений сценарій (можна вдосконалити), розмістити його на запуску програм із:

xterm -e logSessionLock.sh

це також підготовлено збої / відключення системи. Це не сильно перевірено ... але зараз працює чудово. це створить 2 файли, один у $ HOME (журнал), інший у / tmp (вирішення проблеми аварійної системи)

logSessionLock.sh

#!/bin/bash

logFile="."`basename $0`".log"

function FUNClog {
  strTime=`gnome-screensaver-command --time`
  strDate=`date +"%Y%m%d-%H%M%S"`
  strLog="$strDate ($1) $strTime"
}

function FUNCwriteLog {
  echo $strLog >>$HOME/$logFile
  echo $strLog
}

active=false
firstTime=true

# restores last log entry in case of a system crash
strLog=`cat "/tmp/$logFile.tmp"`
FUNCwriteLog
echo "" >"/tmp/$logFile.tmp"
if [[ -n "$strLog" ]]; then #if has something, it was active when the system crashed
  active=true
fi

while true; do 
  if gnome-screensaver-command --query |grep -q "The screensaver is active"; then
    if ! $active; then
      # restore the saved tmp log
      strLog=`cat "/tmp/$logFile.tmp"`
      FUNCwriteLog

      # update log (can be off when this line is reached? once it seem to happen...)
      FUNClog BEGIN
      FUNCwriteLog #logs the begin time

      active=true
    else
      FUNClog ON #stores the ammount of time the screensaver has been ON
      echo $strLog >"/tmp/$logFile.tmp"
    fi
  else
    if $active; then
      FUNCwriteLog #saves the ammount of time the screensaver has been ON

      FUNClog OFF
      FUNCwriteLog
      echo "" >"/tmp/$logFile.tmp"

      active=false
    fi
  fi 

  sleep 1
done

журнал такий:

 20120214-191528 (BEGIN) The screensaver has been active for 0 seconds.
 20120214-193602 (ON) The screensaver has been active for 1234 seconds.
 20120214-193603 (OFF) The screensaver is not currently active.

3

Пакет " Workrave " не тільки відстежує, чи використовуєте ви комп'ютер, і допомагає робити перерви протягом дня, але також надає чудовий набір статистики, як сирої (у текстовому файлі), так і через GUI ( Daily usage: 5:41:00 for Jul 21). Статистика також включає такі речі, як хвилини використання миші, відстань руху миші, натискання клавіш тощо.

Встановіть його з офіційних сховищ, додайте його до рядка меню, клацніть правою кнопкою миші та оберіть "статистика". Ви отримаєте календар, щоб вибрати день, про який хочете знати. Або подивіться на дані в ~ / .workrave / historystats


1
Це виглядає як дуже працездатне рішення. Я хотів би знайти спосіб відключення нагадувань про "мікророзрив", який може бути дуже дратує, але в іншому випадку, здається, накопичується саме те, що я шукаю. Спасибі!
jkcunningham

1
@jkcunningham Увімкнути або вимкнути мікророзриви, перерви на відпочинок або щоденний ліміт легко у діалоговому вікні / налаштуваннях. Хоча, звичайно, вашим очам, зап'ястям, рукам, спині і т. Д. Реально робити регулярні перерви, а робоча трубка робить це легко (навіть весело) робити це, одночасно полегшуючи відкладення або пропуск випадкової перерви, якщо ти прямо посеред чогось.
nealmcb

2

Якщо ви видалите --profile, ви отримаєте формат відсутні мітки часу, але він має, чи є заставка активною.

$ dbus-monitor "type='signal',interface='org.gnome.ScreenSaver'
...
signal sender=:1.46 -> dest=(null destination) serial=1881 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true

Я використовував модифікацію цього сценарію PHP для активації або дезактивації речей на основі моєї заставки

#!/usr/bin/php
<?php
$handle = popen("dbus-monitor 'path=/org/gnome/ScreenSaver, member=ActiveChanged' 2>&1", 'r');
echo "'$handle'; " . gettype($handle) . "\n";
while (!feof($handle)) {
    $read = fgets($handle);
    if(preg_match("/^\s+boolean (\w+)/", $read, $matches))
    {
                $active = ($matches[1] == 'true');
                // do something here
    }
}
pclose($handle);
?>

Інший варіант - використовувати gnome-screensaver-command --query. Використовуючи crontab, я дозволяю bitcoin використовувати всі 4 ядра, коли заставка активна, але він отримує лише 1 ядро, коли я використовую комп'ютер.

DISPLAY=":0.0"
* * * * * if gnome-screensaver-command --query 2>&1 | grep -q 'is active'; then bitcoind setgenerate true 4; else bitcoind setgenerate true 1; fi

DISPLAY: Без встановлення DISPLAY команда gnome-screensaver-команда не зможе знайти екран під час запуску з крона. Це має запускатись із тим самим користувачем, який увійшов у систему.

2>&1: Це спрямовує будь-які помилки на стандартний вихід, який фіксується ...

| grep -q 'is active';: -q робить греп тихим, він нічого не видає. Але команда повертає успіх або невдачу, яку використовує if.

Я усвідомлюю, що жодне з них не є повним рішенням, але, сподіваємось, їх достатньо для початку.


2

Це більш повний сценарій. Ви можете запускати його з cron щохвилини, і якщо заставка активна, вона записуватиме, як довго вона була активною. Після того, як він відключиться, він візьме останнє вимірювання та додасть його до ~ / Screensaver.log. Якщо ви запускаєте його з cron, він може бути неточним протягом 59 секунд щоразу, коли заставка вимикається.

#!/bin/bash
export DISPLAY=':0'
if gnome-screensaver-command -q 2>&1 | grep -q 'is active'; then
    # this will overwrite the file each time.
    gnome-screensaver-command --time > /tmp/ScreensaverActiveTime
# if the screensaver is not active and we have the file from last time this ran ...
elif [ -e /tmp/ScreensaverActiveTime ]; then
    # append it to our log and ...
    cat /tmp/ScreensaverActiveTime >> ~/Screensaver.log
    # remove the file. It will be recreated once the screensaver activates again.
    rm /tmp/ScreensaverActiveTime
fi

Мені подобається такий підхід. Можливо, може виникнути неполадка, якщо машина перебуває в режимі заставки в режимі заставки, залишаючи підвісний / tmp / screensaveractivetime для реєстрації. Для моїх цілей це обійдеться: #! / Bin / bash ## 4 стани: ## * робочий ## * не працює, але заставка ще не активна ## * заставка активна ## * збою живлення комп'ютера або вимкнено # # Я хочу зареєструвати перші два стани експорту DISPLAY = ': 0' SS_LAG = 10, якщо gnome-screensaver-command -q 2> & 1 | grep -q 'неактивний'; то DSTR = date "+%Y %m %d %H %M відлуння "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham

Гаразд, це не вийшло добре - 5 хвилин максимум змін. Цього разу я отримаю там розмітку коду: [код] #! / Bin / bash # 4 повідомляє: # * працює # * не працює, заставка неактивна # * заставка активна # * комп’ютер вимкнено # я хочу записати перші два і затримка заставки затримка експорту DISPLAY = ': 0' SS_LAG = 10, якщо gnome-screensaver-command -q 2> & 1 | grep -q 'неактивний'; то DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Я даю: як ви створюєте блок коду в коментарі? 4 місця не працюють.
jkcunningham

-1

Я використовую uptimeкоманду, але це не дає активному / неактивному часу системи. режим безперервного часу надає в одному рядку відображення наступної інформації. Поточний час, як довго працює система, скільки користувачів зараз увійшли в систему, а система завантажує в середньому за останні 1, 5 та 15 хвилин.


Моя поточна тривалість роботи - 81 день, 23 години 25 хвилин. Запевняю, я так довго не сидів перед комп'ютером. Дякую, але це не вийде. Я шукаю спосіб визначити - приблизно - як довго щодня сиджу перед комп’ютерами. Тому я дивлюся на заставку активний / неактивний час.
jkcunningham

Це добре. Так, як я вже згадував, це не дасть вам активного / неактивного часу системи, і я не знаю способу її обчислити з екрану в активний / неактивний час.
Chethan S.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.