Aktif / aktif olmayan ekran koruyucu aracılığıyla bilgisayar kullanımını ölçmenin yolu?


15

Bir bilgisayarda harcadığım günlük zor zamanı belirlemek için basit bir yol arıyorum. Süreçleri, tuş basmalarını, fare tıklamalarını ve benzerlerini izlemeye çalışırsanız bu zor bir görev olabilir, çünkü bir kodlama sorunu hakkında düşünmekten, bir web makalesini okumaktan, telefonda konuşmaktan veya köpek. Bilgisayar aklımı okuyamıyor. Bilgisayarları 7/24 açık bıraktığım için girişler çalışmayacak.

Bilgisayarın ekran koruyucu modunda ne kadar zaman harcadığını günlüğe kaydetme fikrine vurdum. Benim hatam o zaman ekran koruyucu moduna kaç kez boşta-ekran koruyucu ürün daha büyük olacaktır. Bunu 24 saatten çıkarmak bana amacım için makul bir tahmin verecektir.

Sorun şu ki: Ekran koruyucu açılıp kapandığında nasıl oturum açılacağını bilmiyorum. Şu anda çoğu makinede Ubuntu 10.10 kullanıyorum, bazılarında 11.04'e yükseltmeye başlamak üzereyim.

Herhangi bir fikir?

Daha fazla googling yaptıktan sonra, işe yarayabilecek gibi görünen ancak önemli bir bileşeni eksik olan dbus monitörüne çarptım. İşte ben bir daemon olarak monitörü başlatan senaryo:

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

Ekranı birkaç kez kilitledikten ve kilidini açtıktan sonra ürettiği çıktı:

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

İkinci sütun saniyeler içinde Unix UTC'dir. Eksik bileşen, ekran koruyucunun açık veya kapalı olduğunu tanımlamamasıdır! Sanırım NameAcquired'in gerçekleştiği andan itibaren geçiş yapabileceklerini varsayabilirim, ama her şeyi senkronizasyondan çıkaracağını tahmin edemediğim eksik veya ekstra bir olay olabileceği beni rahatsız ediyor.

Fikirler için çok yükümlü.

jkcunningham


Hamster gibi zaman yönetimi araçları bir seçenek midir?
Nathan Osman

Daha yeni kurdum. Henüz görevlere özel olarak giriş yapmadığım zamanı nasıl işleyeceği belli değil, ama ilginç görünüyor.
jkcunningham,

Yarım saat kadar süredir var ve her seferinde başlatılmasını gerektiriyor gibi görünüyor. Bu bir dezavantaj. Şarj etme için belirli bir zaman ayırmaya çalışmıyorum, sadece bilgisayarda harcanan zaman. Ve eğer onu açmayı unutursam, o zaman hesaba katılmaz. Yine de onunla oynuyorum.
jkcunningham

1
Bu, bilgisayarda harcanan zamanı ölçmek açısından çok iyi bir soru. Ekran koruyucu hakkında çok güzel bir fikir.
Luis Alvarado

Yanıtlar:


4

Teşekkür ve basit, ham bir komut dosyası (iyileştirilebilir), ile başlangıç ​​uygulamaları koymak geri katkıda bulunmak istiyorum:

xterm -e logSessionLock.sh

sistem çökmesi / karartması da hazırlanır. Ağır test edilmedi ... ama şimdiye kadar harika çalışıyor. biri $ HOME (günlük) diğeri / tmp (sys crash geçici çözümü) 'nde 2 dosya oluşturur

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

günlük şöyle:

 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 " paketi sadece bilgisayarınızı kullanıp kullanmadığınızı izlemekle kalmaz, aynı zamanda gün içinde mola vermenize yardımcı olur, aynı zamanda hem ham (metin dosyasında) hem de GUI ( Daily usage: 5:41:00 for Jul 21) ile güzel bir istatistik seti sağlar . İstatistikler ayrıca dakikalarca fare kullanımı, fare hareket mesafesi, tuş vuruşları vb.

Resmi depolardan yükleyin, menü çubuğunuza ekleyin, sağ tıklayın ve "istatistik" i seçin. Bilmek istediğiniz günü seçmek için bir takvim alacaksınız. Veya ~ / .workrave / historyystats içindeki verilere bakın


1
Bu çok uygulanabilir bir çözüm gibi görünüyor. Ben oldukça sinir bozucu olabilir "mikro kırılma" hatırlatmalar devre dışı bırakmak için bir yol bulmak istiyorum, ama aksi takdirde sadece aradığımı birikmiş gibi görünüyor. Teşekkürler!
jkcunningham

1
@jkcunningham Sağ tık / Tercihler iletişim kutusundan mikro kırıkları, dinlenme molalarını veya günlük sınırı etkinleştirmek veya devre dışı bırakmak kolaydır. Tabii ki, gözlerinizin, bileklerinizin, kollarınızın, sırtınızın vb. bir şeyin tam ortasındasınız.
nealmcb

2

--Profile kaldırırsanız zaman damgaları eksik bir biçim alırsınız, ancak ekran koruyucunun etkin olup olmadığı var.

$ 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

Ekran koruyucuma göre bir şeyler etkinleştirmek veya devre dışı bırakmak için bu PHP betiğinin bir modifikasyonunu kullandım

#!/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);
?>

Diğer seçenek kullanmaktır gnome-screensaver-command --query. Crontab kullanarak ekran koruyucusu etkinken bitcoin'in 4 çekirdeğin tümünü kullanmasına izin veriyorum, ancak bilgisayarımı kullanırken sadece 1 çekirdek alıyor.

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 ayarı yapılmadan gnome-screensaver-command cron'dan çalıştırıldığında ekranı bulamaz. Bu, oturum açmış kullanıcıyla aynı şekilde çalışmalıdır.

2>&1: Bu, herhangi bir hatayı yakaladığı standart çıktıya yönlendirir ...

| grep -q 'is active';: -q, grep'i sessizleştirir, hiçbir şey çıkarmaz. Ancak komut, if tarafından kullanılan bir başarı veya başarısızlık döndürür.

Bunların hiçbirinin tam bir çözüm olmadığının farkındayım, ama umarım başlamanız için yeterlidir.


2

Bu daha eksiksiz bir betik. Her dakika cron'dan tetikleyebilirsiniz ve ekran koruyucu etkinse, ne kadar süredir aktif olduğunu kaydeder. Devre dışı bırakıldığında son ölçümü alır ve ~ / Screensaver.log dosyasına ekler. Eğer cron'dan çalıştırırsanız, ekran koruyucu her devre dışı bırakıldığında 59 saniyeye kadar yanlış olabilir.

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

Bu yaklaşımı seviyorum. Bir makine ekran koruyucu modundayken bir asılı / tmp / screensaveractivetime günlüğüne bırakılırsa bir köşe durumu sorunu olabilir. Benim amacım için bu etrafında olurdu: #! / Bin / bash ## 4 devletler: ## * çalışma ## * çalışmıyor, ancak ekran koruyucu henüz aktif değil ## * ekran koruyucu etkin ## * bilgisayar güç kesintisi veya kapalı # # İlk iki durumu dışa aktarmak istiyorum DISPLAY = ': 0' gnome-screensaver-command -q 2> & 1 ise SS_LAG = 10 | grep -q 'etkin değil'; sonra DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham

Tamam, bu iyi çalışmadı - düzenlemeler için maksimum 5 dakika. Bu sefer kod işaretlemesini orada alacağım: [kod] #! / Bin / bash # 4 durumu: # * çalışma # * boş, ekran koruyucu etkin değil # * ekran koruyucu etkin # * bilgisayar kapalı # İlk ikisini kaydetmek istiyorum ve ekran koruyucu gecikme ayarı verme DISPLAY = ': 0' gnome-screensaver-command -q 2> & 1 ise SS_LAG = 10 | grep -q 'etkin değil'; sonra DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Veriyorum: bir açıklamada kod bloğunu nasıl yaratırsınız? 4 boşluk çalışmıyor.
jkcunningham

-1

uptimeKomut kullanıyorum ama sistemin aktif / pasif zamanını vermiyor. uptime, aşağıdaki bilgilerin tek satırlık bir görüntüsünü verir. Geçerli saat, sistemin ne kadar süredir çalıştığı, şu anda kaç kullanıcının oturum açtığı ve son 1, 5 ve 15 dakika boyunca sistem yük ortalamaları.


Geçerli çalışma sürem 81 gün 23 saat 25 dakika. Eminim ki uzun zamandır bilgisayar başında oturmuyorum. Teşekkürler, ama bu işe yaramaz. Günlük olarak bilgisayarların önünde ne kadar süre oturduğumu belirlemek için bir yol arıyorum. Bu yüzden ekran koruyucuyu aktif / pasif zamanlara bakıyorum.
jkcunningham

Bu iyi. Evet, bahsettiğim gibi, sistemin aktif / pasif zamanını vermeyecek ve ekran koruyucu aktif / pasif zamanlardan hesaplamanın bir yolunu bilmiyorum.
Chethan S.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.