通过屏幕保护程序有效/无效时间来衡量计算机使用率的方法?


15

我正在寻找一种简单的方法来确定每天在计算机上花费的时间。如果您尝试监视过程,按键,鼠标点击等操作,那么这将是一项艰巨的任务,因为您可能会做任何事情,包括思考编码问题,阅读网络文章,打电话,或者走走。狗。电脑无法读懂我的想法。由于我将计算机保持24/7全天候运行,因此无法登录。

我想到了记录计算机在屏幕保护程序模式下花费的时间的想法。这样,我的错误将不大于屏保空闲时间与其进入屏保模式的次数的乘积。从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 2011年

我已经将它运行了半个小时左右,并且看来它要求每次都启动它。那是一个缺点。我不是要为特定的时间计时,例如,为了充电,而只是在计算机上花费时间。而且,如果我忘记打开它,那将是无法计算的时间。我仍然在玩它。
jkcunningham

1
关于测量PC时间花费,这是一个很好的问题。关于屏幕保护程序的好主意。
路易斯·阿尔瓦拉多

在github github.com/nitesh-/hoursboard上检查一下。这可能会回答您的问题
Nitesh morajkar 2013年

Answers:


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
这看起来是一个非常可行的解决方案。我想找到一种方法来禁用“ microbreak”提醒,这可能会很烦人,但否则它似乎会积累我想要的东西。谢谢!
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时,当屏幕保护程序处于活动状态时,我让比特币使用所有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,则从cron运行时,gnome-screensaver-command将无法找到屏幕。它必须以同一用户登录身份运行。

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 / screensaveractivetime记录下来,则可能会出现极端情况。就我的目的而言,它可以解决:#!/ bin / bash ## 4状态:## *工作中## *不工作,但屏幕保护程序尚未激活## *屏幕保护程序处于活动状态## *计算机电源故障或关闭# #如果gnome-screensaver-command -q 2>&1 |#1我想记录前两个状态export DISPLAY =':0'SS_LAG = 10 grep -q'未激活'; 然后DSTR = date "+%Y %m %d %H %M echo“ $ SS_LAG $ DSTR” >> $ {HTDOCS} /data/work.log fi
jkcunningham 2011年

好的,锻炼得不好-最多5分钟进行修改。这次,我将在此处获得代码降价:[代码]#!/ bin / bash#4状态:#*工作中#*空闲,屏幕保护程序处于非活动状态#*屏幕保护程序处于活动状态#*计算机已关闭#我要记录前两个如果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 2011年

-1

我使用uptime命令,但是它没有给出系统的活动/不活动时间。正常运行时间以一行显示以下信息。当前时间,系统运行了多长时间,当前登录了多少用户以及过去1、5和15分钟的平均系统负载。


我当前的正常运行时间是81天23小时25分钟。我向你保证,我没有坐在电脑前那么久。谢谢,但是那行不通。我正在寻找一种方法来确定-大致-我每天在计算机前坐多长时间。这就是为什么我要查看屏幕保护程序的有效/无效时间。
jkcunningham 2011年

那很好。是的,正如我提到的那样,它不会为您提供系统的活动/不活动时间,我也不知道根据屏幕保护程序的活动/不活动时间来计算系统的方法。
Chethan S. 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.