Способ измерения использования компьютера с помощью заставки активного / неактивного времени?


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


Можно ли использовать такие инструменты управления временем, как Hamster?
Натан Осман

Я только что установил его. Неясно, как он будет обрабатывать время, пока я не регистрируюсь специально для задач, но это выглядит интересно.
jkcunningham

Я включал его в течение получаса или около того, и, похоже, требует, чтобы он запускался каждый раз. Это недостаток. Я не пытаюсь отследить определенное время, скажем, для зарядки, просто время, проведенное за компьютером. И если я забуду включить его, то это время будет пропущено. Я все еще играю с этим все же.
jkcunningham

1
Это очень хороший вопрос в отношении измерения времени, проводимого на ПК. Очень хорошая идея о заставке.
Луис Альварадо

Проверьте это на github github.com/nitesh-/hoursboard . Это может ответить на ваш вопрос
Nitesh Morajkar

Ответы:


4

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

xterm -e logSessionLock.sh

это также системный сбой / затемнение. Это не сильно проверено ... но работает отлично до сих пор. он создаст 2 файла, один в $ HOME (журнал), другой в / tmp (обходной путь sys)

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 » не только отслеживает, используете ли вы компьютер и помогает ли вы делать перерывы в течение дня, но также предоставляет хороший набор статистики, как в необработанном виде (в текстовом файле), так и через графический интерфейс пользователя ( Daily usage: 5:41:00 for Jul 21). Статистика также включает в себя такие вещи, как минуты использования мыши, расстояние перемещения мыши, нажатия клавиш и т. Д.

Установите его из официальных репозиториев, добавьте его в строку меню, щелкните правой кнопкой мыши и выберите «статистика». Вы получите календарь для выбора дня, о котором хотите узнать. Или посмотрите на данные в ~ / .workrave / historystats


1
Это выглядит как очень работоспособное решение. Я хотел бы найти способ отключить напоминания о «микроразрыве», которые могут быть довольно раздражающими, но в противном случае они накапливают именно то, что я ищу. Благодарность!
jkcunningham

1
@jkcunningham Легко включить или отключить микробрейки, перерывы на отдых или дневной лимит из диалогового окна правой кнопки мыши / Настройки. Хотя, конечно, для ваших глаз, запястий, рук, спины и т. Д. Действительно полезно делать регулярные перерывы, а workrave позволяет легко (даже весело) сделать это, а также легко отложить или пропустить случайный перерыв, если ты прямо посреди чего-то.
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, я позволяю биткойнам использовать все 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-command не сможет найти экран при запуске из cron. Это должно работать, когда тот же пользователь вошел в систему.

2>&1: Это направляет любые ошибки в стандартный вывод, который фиксируется ...

| grep -q 'is active';: -q отключает grep, ничего не выводит. Но команда возвращает успех или неудачу, которые используются 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 / screenaveractive для регистрации. В моих целях это обойдется: #! / 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
jkcunningham

Хорошо, это не сработало - максимум 5 минут для правок. На этот раз я получу там разметку кода: [code] #! / 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команду, но она не дает времени системы активного / неактивного. uptime отображает в одной строке следующую информацию. Текущее время, продолжительность работы системы, количество пользователей, вошедших в систему, и средние значения загрузки системы за последние 1, 5 и 15 минут.


Сейчас я работаю 81 день 23 часа 25 минут. Уверяю вас, я не сидел перед компьютером так долго. Спасибо, но это не сработает. Я ищу способ определить - примерно - как долго я сижу перед компьютерами ежедневно. Вот почему я смотрю на заставку время активности / неактивности.
jkcunningham

Это хорошо. Да, как я уже говорил, оно не даст вам активного / неактивного времени системы, и я не знаю, как рассчитать его по времени, когда экран / заставка активен / неактивен.
Четан С.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.