スクリーンセーバーのアクティブ/非アクティブ時間を使用してコンピューターの使用状況を測定する方法は?


15

私が1日のコンピューターで過ごすおおよその時間を決定する簡単な方法を探しています。プロセス、キーの押下、マウスのクリックなどを監視しようとすると、これは困難なタスクになる可能性があります。なぜなら、コーディングの問題について考えたり、Web記事を読んだり、電話で話したり、犬。コンピューターは私の心を読むことができません。24時間年中無休でコンピューターを監視しているため、ログインは機能しません。

私は、コンピューターがスクリーンセーバーモードでどれだけの時間を費やしているかを記録するというアイデアに思いつきました。私のエラーは、スクリーンセーバーへのアイドル時間とスクリーンセーバーモードに入る回数の積よりも大きくなることはありません。これを24時間から引くと、私の目的にとって妥当な推定値が得られます。

問題は、スクリーンセーバーがオン/オフになったときにログを記録する方法がわからないことです。現在、ほとんどのマシンでUbuntu 10.10を実行していますが、一部のマシンで11.04へのアップグレードを開始しようとしています。

何か案は?

[編集]さらにグーグルで調べた結果、dbus-monitorが機能したように見えましたが、重要な要素が欠落しています。これは、モニターをデーモンとして起動するスクリプトです。

#!/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

2番目の列は明らかに秒単位のUNIX UTCです。不足している要素は、スクリーンセーバーがオンかオフかを識別しないことです!NameAcquiredが発生したときからトグルすると想定できると思いますが、すべてが同期しなくなると予想できない行方不明または余分なイベントがあるかもしれないとうんざりします。

アイデアを非常に義務付けられています。

jkcunningham


ハムスターのような時間管理ツールはオプションですか?
ネイサンオスマン

ちょうどインストールしました。まだタスクに特にログを記録しない時間をどのように処理するかは明確ではありませんが、面白そうです。
-jkcunningham

私は今30分かそこらのためにそれを持っていますが、それは毎回開始する必要があるようです。それは欠点です。私は、例えば充電の目的のために特定の時間を計ろうとはしていません。ただコンピューターで過ごす時間です。そして、私がそれをつけるのを忘れるならば、その時間は説明されません。私はまだそれで遊んでいます。
jkcunningham

1
これは、PCで費やされる時間の測定に関して非常に良い質問です。スクリーンセーバーについての非常に素晴らしいアイデア。
ルイスアルバラード

github github.com/nitesh-/hoursboardでこれを確認してください。これはあなたの質問に答えるかもしれません
Nitesh morajkar

回答:


4

私は感謝し、シンプルで生のスクリプト(改善可能)を提供し、スタートアップアプリケーションにそれを置きたい:

xterm -e logSessionLock.sh

システムクラッシュ/ブラックアウトも準備されています。十分なテストは行われていませんが、今までうまく機能しています。2つのファイルを作成します。1つは$ HOME(ログ)に、もう1つは/ 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 "パッケージは、コンピューターを使用しているかどうかを追跡し、日中休憩するのに役立つだけでなく、生(テキストファイル内)とGUI(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を設定しないと、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つの状態:## *動作中## *動作しませんが、スクリーンセーバーはまだアクティブではありません## *スクリーンセーバーはアクティブ## *コンピューターの電源障害またはオフ# #最初の2つの状態をログに記録しますexport DISPLAY = ':0' SS_LAG = 10 if gnome-screensaver-command -q 2>&1 | grep -q 'is inactive'; DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham

さて、それはうまくいきませんでした-編集の最大5分。今回はそこにコードのマークダウンを取得します:[code]#!/ bin / bash#4 state:#* working#* idle、screensaver inactive#* screensaver active#* computer off#最初の2つを記録したいスクリーンセーバーの遅延設定は、gnome-screensaver-command -q 2>&1の場合、DISPLAY = ':0' SS_LAG = 10をエクスポートします。grep -q 'is inactive'; 次に、DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code]を与える:コメントにコードブロックを作成するにはどうすればよいですか?4つのスペースは機能しません。
-jkcunningham

-1

uptimeコマンドを使用しますが、システムのアクティブ/非アクティブ時間は表示されません。uptimeは、次の情報を1行で表示します。現在の時刻、システムの実行時間、現在ログオンしているユーザーの数、および過去1、5、および15分間のシステム負荷の平均。


現在の稼働時間は81日23時間25分です。そんなに長くコンピューターの前に座っていなかったことを保証します。感謝しますが、それは機能しません。私は、毎日大体どのくらいコンピュータの前に座っているかを判断する方法を探しています。だからこそ、スクリーンセーバーのアクティブ/非アクティブな時間を見ているのです。
-jkcunningham

それは良い。ええ、先ほど述べたように、システムのアクティブ/非アクティブ時間はわかりませんし、スクリーンセーバーのアクティブ/非アクティブ時間から計算する方法もわかりません。
チェサンS.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.