Cara mengukur penggunaan komputer melalui screensaver aktif / tidak aktif?

15

Saya mencari cara sederhana untuk menentukan jumlah waktu kasar per hari yang saya habiskan di komputer. Ini bisa menjadi tugas yang sulit jika Anda mencoba memantau proses, penekanan tombol, klik mouse dan sejenisnya, karena orang dapat melakukan apa saja dari memikirkan masalah pengkodean, membaca artikel web, berbicara di telepon, atau pergi berjalan anjing. Komputer tidak bisa membaca pikiranku. Karena saya meninggalkan komputer pada 24/7 log-in pemantauan tidak akan berfungsi.

Saya menemukan ide untuk mencatat berapa banyak waktu yang dihabiskan komputer dalam mode screensaver. Kesalahan saya kemudian tidak akan lebih besar dari produk idle-time-to-screensaver dengan berapa kali ia masuk ke mode screensaver. Mengurangkan ini dari 24 jam akan memberi saya perkiraan yang masuk akal untuk tujuan saya.

Masalahnya adalah: Saya tidak tahu cara login ketika screensaver dihidupkan dan dimatikan. Saya menjalankan Ubuntu 10.10 saat ini di sebagian besar mesin, akan mulai memutakhirkan ke 11,04 pada beberapa dari mereka.

Ada ide?

[sunting] Setelah lebih banyak googling saya menemukan dbus-monitor yang sepertinya berfungsi, tetapi kehilangan bahan penting. Inilah skrip yang saya jalankan yang meluncurkan monitor sebagai daemon:

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

Ini adalah output yang dihasilkannya setelah mengunci dan membuka kunci layar beberapa kali:

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

Kolom kedua jelas unix UTC dalam hitungan detik. Bahan yang hilang adalah tidak mengidentifikasi apakah screensaver hidup atau mati! Saya kira saya bisa berasumsi mereka beralih dari saat NameAcquired terjadi, tetapi itu membuat saya mual bahwa mungkin ada peristiwa yang hilang atau tambahan yang tidak dapat saya antisipasi yang akan membuat semuanya tidak sinkron.

Banyak diwajibkan untuk ide.

jkcunningham

jkcunningham
sumber
Apakah alat manajemen waktu seperti Hamster merupakan pilihan?
Nathan Osman
Saya baru saja menginstalnya. Tidak jelas bagaimana ini akan menangani waktu saya belum secara khusus login ke tugas, tetapi itu terlihat menarik.
jkcunningham
Saya sudah menggunakannya sekarang selama setengah jam atau lebih dan sepertinya itu mengharuskan itu dimulai setiap kali. Itu kekurangan. Saya tidak mencoba menghitung waktu tertentu untuk, katakanlah, tujuan pengisian daya, hanya waktu yang dihabiskan di depan komputer. Dan jika saya lupa menyalakannya waktu itu akan tidak terhitung. Saya masih bermain dengannya.
jkcunningham
1
Ini adalah pertanyaan yang sangat bagus dalam hal mengukur waktu yang dihabiskan untuk PC. Ide yang sangat bagus tentang screensaver.
Luis Alvarado
Lihat ini di github github.com/nitesh-/hoursboard . Ini mungkin menjawab pertanyaan Anda
Nitesh morajkar

Jawaban:

4

Saya ingin mengucapkan terima kasih dan berkontribusi kembali skrip sederhana, mentah (dapat ditingkatkan), letakkan di aplikasi startup dengan:

xterm -e logSessionLock.sh

itu sistem crash / blackout disiapkan juga. Itu tidak diuji di surga ... tetapi bekerja dengan baik sampai sekarang. itu akan membuat 2 file, satu di $ HOME (log) yang lain di / tmp (solusi crash 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

lognya seperti ini:

 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.
Kekuatan Aquarius
sumber
3

Paket " Workrave " tidak hanya melacak apakah Anda menggunakan komputer dan membantu Anda beristirahat di siang hari, tetapi juga menyediakan serangkaian statistik yang bagus, baik mentah (dalam file teks) dan melalui GUI ( Daily usage: 5:41:00 for Jul 21). Statistik ini juga mencakup hal-hal seperti menit penggunaan mouse, jarak pergerakan mouse, penekanan tombol dll.

Instal dari repositori resmi, tambahkan ke bilah menu Anda, klik kanan dan pilih "statistik". Anda akan mendapatkan kalender untuk memilih hari yang ingin Anda ketahui. Atau lihat data di ~ / .workrave / historystats

nealmcb
sumber
1
Ini terlihat seperti solusi yang sangat bisa diterapkan. Saya ingin menemukan cara untuk menonaktifkan pengingat "microbreak" yang bisa agak menjengkelkan, tetapi selain itu tampaknya menumpuk hanya apa yang saya cari. Terima kasih!
jkcunningham
1
@jkcunningham Mudah untuk mengaktifkan atau menonaktifkan microbreaks, istirahat, atau batas harian dari dialog klik kanan / Preferensi. Meskipun, tentu saja, itu baik untuk mata, pergelangan tangan, lengan, punggung dll untuk benar-benar beristirahat secara teratur, dan latihan membuatnya mudah (bahkan menyenangkan) untuk melakukan itu sementara juga membuatnya mudah untuk menunda atau melewatkan istirahat sesekali jika Anda tepat di tengah-tengah sesuatu.
nealmcb
2

Jika Anda menghapus --profile Anda akan mendapatkan format cap waktu yang hilang, tetapi memiliki apakah screensaver aktif atau tidak.

$ 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

Saya telah menggunakan modifikasi skrip PHP ini untuk mengaktifkan atau menonaktifkan hal-hal berdasarkan screensaver saya

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

Pilihan lainnya adalah menggunakan gnome-screensaver-command --query. Menggunakan crontab, saya membiarkan bitcoin menggunakan semua 4 core ketika screensaver aktif, tetapi hanya mendapat 1 inti ketika saya menggunakan komputer saya.

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: Tanpa pengaturan DISPLAY gnome-screensaver-command tidak akan dapat menemukan layar saat dijalankan dari cron. Ini harus dijalankan ketika pengguna yang sama masuk.

2>&1: Ini mengarahkan kesalahan apa pun ke dalam output standar, yang ditangkap oleh ...

| grep -q 'is active';: -q membuat grep diam, tidak menghasilkan apa-apa. Tetapi perintah mengembalikan keberhasilan atau kegagalan yang digunakan oleh if.

Saya menyadari tidak satupun dari ini adalah solusi yang lengkap, tetapi mudah-mudahan itu cukup untuk memulai.

Asa Ayers
sumber
2

Ini adalah skrip yang lebih lengkap. Anda dapat memicu dari cron setiap menit dan jika screensaver aktif, itu akan merekam berapa lama itu aktif. Setelah dinonaktifkan, ia akan melakukan pengukuran terakhir dan menambahkannya ke ~ / Screensaver.log. Jika Anda menjalankannya dari cron, itu mungkin tidak akurat hingga 59 detik setiap kali screensaver dinonaktifkan.

#!/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
Asa Ayers
sumber
Saya suka pendekatan ini. Mungkin ada masalah sudut kasus jika mesin turun saat dalam mode screensaver meninggalkan menggantung / tmp / screensaveractivetime untuk dicatat. Untuk tujuan saya ini akan mengelilinginya: #! / Bin / bash ## 4 menyatakan: ## * bekerja ## * tidak bekerja, tetapi screensaver belum aktif ## * screensaver aktif ## * kegagalan daya komputer atau mematikan # # Saya ingin mencatat ekspor dua negara pertama DISPLAY = ': 0' SS_LAG = 10 jika gnome-screensaver-command -q 2> & 1 | grep -q 'tidak aktif'; lalu DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham
Oke, itu tidak berhasil dengan baik - maks 5 menit untuk pengeditan. Kali ini saya akan mendapatkan penurunan kode di sana: [code] #! / Bin / bash # 4 menyatakan: # * bekerja # * idle, screensaver tidak aktif # * screensaver aktif # * komputer mati # Saya ingin login dua yang pertama dan pengaturan penundaan screensaver, ekspor DISPLAY = ': 0' SS_LAG = 10 jika gnome-screensaver-command -q 2> & 1 | grep -q 'tidak aktif'; lalu DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Saya berikan: bagaimana Anda membuat blok kode dalam komentar? 4 ruang tidak berfungsi.
jkcunningham
-1

Saya menggunakan uptimeperintah, tetapi tidak memberikan waktu aktif / tidak aktif sistem. uptime memberikan tampilan satu baris dari informasi berikut. Waktu saat ini, berapa lama sistem telah berjalan, berapa banyak pengguna yang sedang login, dan rata-rata memuat sistem selama 1, 5, dan 15 menit terakhir.

Chethan S.
sumber
Waktu aktif saya saat ini adalah 81 hari 23 jam 25 menit. Saya yakinkan Anda bahwa saya belum duduk di depan komputer selama itu. Terima kasih, tetapi itu tidak akan berhasil. Saya mencari cara untuk menentukan - kira-kira - berapa lama saya duduk di depan komputer setiap hari. Itu sebabnya saya melihat screensaver aktif / tidak aktif.
jkcunningham
Itu bagus. Ya, seperti yang saya sebutkan itu tidak akan memberi Anda waktu aktif / tidak aktif sistem dan saya tidak tahu cara untuk menghitungnya dari screensaver waktu aktif / tidak aktif.
Chethan S.