स्क्रीनसेवर के माध्यम से कंप्यूटर के उपयोग को मापने का तरीका सक्रिय / सक्रिय समय नहीं?


15

मैं कंप्यूटर पर बिताए जाने वाले समय की रफ राशि निर्धारित करने के लिए एक सरल तरीका ढूंढ रहा हूं। यदि आप प्रक्रियाओं, प्रमुख प्रेस, माउस क्लिक और इस तरह की निगरानी करने की कोशिश करते हैं, तो यह एक मुश्किल काम हो सकता है, क्योंकि किसी को कोडिंग समस्या के बारे में सोचने, वेब लेख पढ़ने, फोन पर बात करने, या दूर जाने से कुछ भी हो सकता है। कुत्ता। कंप्यूटर मेरे दिमाग को नहीं पढ़ सकता है। चूँकि मैं कंप्यूटर को 24/7 मॉनिटरिंग लॉग-इन पर छोड़ता हूँ, इसलिए यह काम नहीं करेगा।

मैं लॉगिंग के विचार पर हिट करता हूं कि कंप्यूटर स्क्रीनसेवर मोड में कितना समय बिताता है। मेरी त्रुटि तब निष्क्रिय-समय-स्क्रीनसेवर के उत्पाद से अधिक नहीं होगी, जितनी बार स्क्रीनसेवर मोड में जाती है। इसे 24 घंटे से घटाकर मुझे एक अनुमान देना होगा जो मेरे उद्देश्यों के लिए उचित होगा।

समस्या यह है: मुझे नहीं पता कि स्क्रीनसेवर चालू और बंद होने पर कैसे लॉग इन करें। मैं फिलहाल अधिकांश मशीनों पर Ubuntu 10.10 चला रहा हूं, उनमें से कुछ पर 11.04 में अपग्रेड करना शुरू करने के बारे में।

कोई विचार?

[संपादित करें] अधिक गोलगप्पे के बाद मैंने डबस-मॉनीटर पर मारा जो ऐसा लग रहा था कि यह काम कर सकता है, लेकिन एक महत्वपूर्ण घटक गायब है। यहां वह स्क्रिप्ट है जो मैं चला रहा हूं जो मॉनीटर को डेमॉन के रूप में लॉन्च करता है:

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

दूसरा स्तंभ स्पष्ट रूप से यूनिक्स यूटीसी सेकंडों में है। लापता घटक यह है कि स्क्रीनसेवर चालू है या बंद नहीं है! मुझे लगता है कि मैं मान सकता हूं कि नामअक्वायर्ड होने के समय से वे टॉगल कर सकते हैं, लेकिन यह मुझे इस बात से चिढ़ता है कि एक लापता या अतिरिक्त घटना हो सकती है जिसका मैं अनुमान नहीं लगा सकता हूं जो सब कुछ सिंक से बाहर कर देगा।

विचारों के लिए बहुत बाध्य है।

jkcunningham


क्या हम्सटर जैसे समय प्रबंधन उपकरण एक विकल्प हैं?
नाथन उस्मान

मैंने अभी इसे स्थापित किया है। यह स्पष्ट नहीं है कि यह समय कैसे संभालेगा मैं विशेष रूप से अभी तक कार्यों में प्रवेश नहीं करता हूं, लेकिन यह दिलचस्प दिखता है।
15

मैंने इसे अभी आधे घंटे या इसके बाद लिया है और ऐसा लगता है कि इसे हर बार शुरू करने की आवश्यकता है। यह एक खामी है। मैं कंप्यूटर पर बिताए गए समय, कहने, चार्ज करने के उद्देश्यों के लिए विशेष रूप से घड़ी की कोशिश नहीं कर रहा हूं। और अगर मैं इसे उस समय चालू करना भूल जाऊं, तो इसके लिए बेहिसाब होगा। मैं अभी भी इसके साथ खेल रहा हूँ।
जक्किंगम

1
पीसी पर समय व्यतीत करने के संबंध में यह एक बहुत अच्छा प्रश्न है। स्क्रीनसेवर के बारे में बहुत अच्छा विचार है।
लुइस अल्वारादो

इसे github github.com/nitesh-/hoursboard पर देखें । यह आपके प्रश्न का उत्तर दे सकता है
नितेश मोरजकर

जवाबों:


4

मैं एक सरल, कच्ची स्क्रिप्ट को धन्यवाद देना चाहता हूं और इसमें योगदान कर सकता हूं (इसे बेहतर बनाया जा सकता है), इसे स्टार्टअप एप्लिकेशन पर रखें:

xterm -e logSessionLock.sh

यह सिस्टम क्रैश / ब्लैकआउट भी तैयार है। यह भारी परीक्षण नहीं है ... लेकिन अब महान काम कर रहा है। यह 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.

3

" कामचोर " पैकेज न केवल आपके कंप्यूटर का उपयोग कर रहा है और दिन के दौरान विराम लेने में आपकी मदद करता है, बल्कि यह ट्रैक भी करता है, बल्कि आँकड़ों का एक अच्छा सेट प्रदान करता है, दोनों कच्चे (एक पाठ फ़ाइल में) और एक GUI ( Daily usage: 5:41:00 for Jul 21) के माध्यम से । आँकड़ों में माउस के उपयोग के मिनट, माउस की चाल की दूरी, कीस्ट्रोक्स आदि जैसे सामान भी शामिल हैं।

इसे आधिकारिक रिपॉजिटरी से स्थापित करें, इसे अपने मेनू बार में जोड़ें, राइट क्लिक करें और "आंकड़े" चुनें। जिस दिन के बारे में आप जानना चाहते हैं, उसे चुनने के लिए आपको एक कैलेंडर मिलेगा। या डेटा को ~ / .workrave / इतिहासस्टेट्स में देखें


1
यह एक बहुत ही उपयोगी समाधान की तरह दिखता है। मैं "माइक्रोब्रेक" रिमाइंडर्स को अक्षम करने का एक तरीका ढूंढना चाहता हूं, जो कि कष्टप्रद हो सकता है, लेकिन अन्यथा यह वही दिखता है जो मैं देख रहा हूं। धन्यवाद!
2

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 gnome-स्क्रीनसेवर-कमांड को सेट किए बिना, क्रोन से चलने पर स्क्रीन को खोजने में सक्षम नहीं होगा। यह उसी उपयोगकर्ता के रूप में चलना चाहिए, जिसमें लॉग इन किया गया हो।

2>&1: यह किसी भी त्रुटि को मानक आउटपुट में निर्देशित करता है, जिस पर कब्जा कर लिया जाता है ...

| grep -q 'is active';: -q ग्रेप को शांत करता है, यह कुछ भी आउटपुट नहीं करता है। लेकिन कमांड एक सफलता या विफलता लौटाता है जिसका उपयोग यदि किया जाता है।

मुझे लगता है कि इनमें से कोई भी एक पूर्ण समाधान नहीं है, लेकिन उम्मीद है कि वे आपको शुरू करने के लिए पर्याप्त हैं।


2

यह एक अधिक संपूर्ण स्क्रिप्ट है। आप इसे हर मिनट क्रोन से ट्रिगर कर सकते हैं और यदि स्क्रीनसेवर सक्रिय है, तो यह रिकॉर्ड करेगा कि यह कितने समय से सक्रिय है। एक बार जब यह निष्क्रिय हो जाएगा तो यह अंतिम माप लेगा और इसे ~ / Screensaver.log में जोड़ देगा। यदि आप इसे क्रॉन से चलाते हैं तो यह स्क्रीनसेवर को निष्क्रिय करने पर हर बार 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 / स्क्रीनसेवरऐक्टिवेट को लॉग इन करने के लिए छोड़ने के दौरान मशीन नीचे जाती है तो कॉर्नर केस समस्या हो सकती है। मेरे उद्देश्यों के लिए यह इसके आस-पास मिलेगा: #! / Bin / bash ## 4 स्टेट्स: ## * वर्किंग ## * काम नहीं कर रहा है, लेकिन स्क्रीनसेवर अभी तक सक्रिय नहीं है ## * स्क्रीनसेवर सक्रिय ## * कंप्यूटर पावर विफलता या बंद # # मैं पहले दो राज्यों के निर्यात DISPLAY = 'पर लॉग इन करना चाहता हूं: 0' SS_LAG = 10 अगर gnome-स्क्रीनसेवर-कमांड -q 2> & 1 | grep -q 'निष्क्रिय है'; फिर DSTR = date "+%Y %m %d %H %M "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log Fi
jkcunningham

ठीक है, कि अच्छी तरह से कसरत नहीं की - संपादन के लिए अधिकतम 5 मिनट। इस बार मुझे वहां कोड मार्कडाउन मिलेगा: [कोड] #! / Bin / bash # 4 स्टेट्स: # * वर्किंग # * निष्क्रिय, स्क्रीनसेवर निष्क्रिय # * स्क्रीनसेवर एक्टिव # * कंप्यूटर ऑफ # मैं पहले दो को लॉग इन करना चाहता हूं और स्क्रीनसेवर देरी सेटिंग एक्सपोर्ट एक्सप्लॉय = ': 0' SS_LAG = 10 अगर gnome-स्क्रीनसेवर-कमांड -q 2> & 1 | grep -q 'निष्क्रिय है'; तब DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log Fi [/ code] मैं देता हूं: आप किसी टिप्पणी में कोड ब्लॉक कैसे बनाते हैं? 4 रिक्त स्थान काम नहीं करते।
jkcunningham

-1

मैं uptimeकमांड का उपयोग करता हूं , लेकिन यह सिस्टम के सक्रिय / निष्क्रिय समय को नहीं देता है। अपटाइम निम्नलिखित सूचनाओं की एक पंक्ति प्रदर्शित करता है। वर्तमान समय, सिस्टम कितने समय से चल रहा है, वर्तमान में कितने उपयोगकर्ता लॉग ऑन हैं, और सिस्टम 1, 5 और 15 मिनट के लिए औसत लोड करता है।


मेरा वर्तमान अपटाइम 81 दिन 23 घंटे 25 मिनट है। मैं आपको विश्वास दिलाता हूं कि मैं लंबे समय तक कंप्यूटर के सामने नहीं बैठा हूं। धन्यवाद, लेकिन यह काम नहीं करेगा। मैं निर्धारित करने का एक तरीका खोज रहा हूं - मोटे तौर पर - मैं दैनिक आधार पर कंप्यूटर के सामने कितनी देर बैठता हूं। इसलिए मैं स्क्रीनसेवर सक्रिय / निष्क्रिय समय देख रहा हूं।
जक्किंगम

अच्छी बात है। हाँ, जैसा कि मैंने उल्लेख किया है कि यह आपको सिस्टम का सक्रिय / निष्क्रिय समय नहीं देगा और मुझे स्क्रीनसेवर सक्रिय / निष्क्रिय समय से इसकी गणना करने का कोई तरीका नहीं पता है।
चेतन एस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.