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

Я ищу простой способ определения приблизительного количества времени, которое я провожу за компьютером. Это может быть трудной задачей, если вы пытаетесь отслеживать процессы, нажатия клавиш, щелчки мыши и т. П., Потому что вы можете делать все, что угодно, от размышления о проблеме кодирования, чтения веб-статьи, разговора по телефону или до ухода от прогулки собака. Компьютер не может прочитать мои мысли. Поскольку я оставляю компьютеры включенными круглосуточно, вход в систему мониторинга не будет работать.

Мне пришла в голову мысль, сколько времени компьютер проводит в режиме заставки. Тогда моя ошибка не будет больше, чем произведение времени простоя на экранную заставку и количества переходов в режим заставки. Вычитание этого из 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

15
задан 15 February 2012 в 22:17

5 ответов

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

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

0
ответ дан 15 February 2012 в 22:17

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

xterm -e logSessionLock.sh

это - системный катастрофический отказ/отключение питания, подготовленный также. Это не heavly, протестированный..., но работает большой сезам теперь. это создаст 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.
4
ответ дан 15 February 2012 в 22:17

Если Вы удалите - профиль, то Вы получите формат, пропускающий метки времени, но он действительно имеет, активна ли экранная заставка.

$ 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 команда экранной заставки гнома не сможет найти экран, когда выполнено от крона. Это должно работать, поскольку тот же пользователь вошел в систему.

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

| grep -q 'is active';:-q делает grep тихим, он ничего не производит. Но команда возвращает успешность или неуспешность, которая используется если.

Я понимаю, что ни один из них не полное решение, но надо надеяться их достаточно для запущения Вас.

2
ответ дан 15 February 2012 в 22:17

Это более полный сценарий. Вы можете запускать его из 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
0
ответ дан 15 February 2012 в 22:17

Я использую команду uptime, но она не дает времени системы активного / неактивного. uptime отображает в одной строке следующую информацию. Текущее время, сколько времени система работает, сколько пользователей в данный момент вошли в систему, и средняя загрузка системы за последние 1, 5 и 15 минут.

0
ответ дан 15 February 2012 в 22:17

Другие вопросы по тегам:

Похожие вопросы: