সক্রিয় স্ক্রিনসেভারের মাধ্যমে কম্পিউটারের ব্যবহার পরিমাপের উপায় / সক্রিয় সময় নয়?


15

আমি একটি কম্পিউটারে প্রতিদিন ব্যয় করা মোটামুটি সময় নির্ধারণের জন্য আমি একটি সহজ উপায় খুঁজছি। প্রক্রিয়াগুলি, কী প্রেসগুলি, মাউস ক্লিকগুলি এবং এর মতো নজরদারি করার চেষ্টা করা যদি এটি একটি কঠিন কাজ হতে পারে, কারণ কোডিং সমস্যার কথা চিন্তা করা, ওয়েব নিবন্ধ পড়া, ফোনে কথা বলা বা হাঁটাচলা বন্ধ রেখে যে কোনও কিছু করা যায় because কুকুর. কম্পিউটার আমার মন পড়তে পারে না। যেহেতু আমি 24/7 কম্পিউটারগুলিতে নজর রাখি লগ-ইনগুলি কাজ করবে না।

কম্পিউটারটি স্ক্রীন-ওভার মোডে কত সময় ব্যয় করে তা লগ করার ধারণার উপরে আমি আঘাত করেছি। আমার ত্রুটিটি তখন অলস-টাইম-টু-স্ক্রীনসেভারের পণ্যের চেয়ে বড় হতে হবে না যতক্ষণ এটি স্ক্রীন ওভার মোডে যায়। 24 ঘন্টা থেকে এটি বিয়োগ করা আমাকে একটি অনুমান দেয় যা আমার উদ্দেশ্যে যুক্তিযুক্ত হতে পারে।

সমস্যাটি হ'ল: স্ক্রিনসেভারটি চালু এবং বন্ধ হয়ে গেলে কীভাবে লগ করতে হয় তা আমি জানি না। আমি বেশিরভাগ মেশিনে এই মুহূর্তে উবুন্টু ১০.১০ চালাচ্ছি, এর মধ্যে কয়েকটিতে ১১.০৪-তে আপগ্রেড করা শুরু করতে চলেছি।

কোন ধারনা?

[সম্পাদনা] আরও গুগল করার পরে আমি ডিবিস-মনিটরের উপরে হিট করেছি যা দেখে মনে হচ্ছে এটি কার্যকর হতে পারে তবে একটি গুরুত্বপূর্ণ উপাদান অনুপস্থিত। এখানে আমি যে স্ক্রিপ্টটি চালাচ্ছি এটি মনিটরটিকে ডেমন হিসাবে চালু করে:

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

দ্বিতীয় কলামটি অবশ্যই সেকেন্ডে ইউনিক্স ইউটিসি। অনুপস্থিত উপাদানটি হ'ল এটি স্ক্রিন ওভার চালু বা বন্ধ কিনা তা সনাক্ত করতে পারে না! আমি মনে করি যে নাম প্রাপ্তির সময়টি ঘটেছিল তখন থেকেই আমি সেগুলি টগল করতে পেরেছিলাম তবে এটি আমার মনে উদ্রেক করেছে যে কোনও অনুপস্থিত বা অতিরিক্ত ঘটনা ঘটতে পারে যা আমি প্রত্যাশা করতে পারি না যা সবকিছু সিঙ্কের বাইরে ফেলে দেবে।

ধারণার জন্য অনেক বাধ্য ob

jkcunningham


হ্যামস্টারের মতো সময় পরিচালনার সরঞ্জামগুলি কি একটি বিকল্প?
নাথান ওসমান

আমি সবেমাত্র এটি ইনস্টল করেছি। এটি স্পষ্ট নয় যে সময়টি কীভাবে হ্যান্ডেল করবে আমি বিশেষভাবে এখনও কার্যগুলিতে লগ করি না তবে এটি আকর্ষণীয় দেখাচ্ছে।
jkcunningham

আমি এখন এটি আধ ঘন্টা বা তার বেশি সময় ধরে রেখেছি এবং দেখে মনে হচ্ছে এটি প্রতিটি বার এটি শুরু করা দরকার। এটি একটি অপূর্ণতা। আমি চার্জিংয়ের উদ্দেশ্যে, কম্পিউটারে সময় ব্যয় করার জন্য নির্দিষ্ট সময় দেখার চেষ্টা করছি না। এবং যদি আমি সেই সময়টি চালু করতে ভুলে যাই তবে তার জন্য অ্যাকাউন্টবিহীন হবে। আমি এখনও এটি নিয়ে খেলছি।
jkcunningham

1
পিসিতে সময় ব্যয় মাপার ক্ষেত্রে এটি একটি খুব ভাল প্রশ্ন। স্ক্রিনসেভার সম্পর্কে খুব সুন্দর ধারণা।
লুইস আলভারাডো

Github github.com/nitesh-/hoursboard এ এটি দেখুন । এটি আপনার প্রশ্নের উত্তর দিতে পারে
নীতেশ মোরাজাককর

উত্তর:


4

আমি ধন্যবাদ জানাতে এবং একটি সাধারণ, কাঁচা স্ক্রিপ্ট (উন্নত করা যেতে পারে) ফিরিয়ে দিতে চাই, এটিকে স্টার্টআপ অ্যাপ্লিকেশনগুলিতে রেখে দিন:

xterm -e logSessionLock.sh

এটি সিস্টেম ক্র্যাশ / ব্ল্যাকআউটও প্রস্তুত। এটি ভারী পরীক্ষা করা হয় না ... তবে এখন পর্যন্ত দুর্দান্ত কাজ করছে। এটি 2 টি ফাইল তৈরি করবে, একটি $ HOM এ (লগ) অন্য / 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

" ওয়ার্করেভ " প্যাকেজটি কেবল আপনি আপনার কম্পিউটার ব্যবহার করছেন কিনা এবং এটি আপনাকে দিনের বেলায় বিরতি নিতে সহায়তা করে কিনা তাও তা পরীক্ষা করে না, তবে কাঁচা (একটি টেক্সট ফাইলে) এবং জিইউআইয়ের মাধ্যমে উভয়ই পরিসংখ্যানের একটি দুর্দান্ত সেট সরবরাহ করে (Daily usage: 5:41:00 for Jul 21 ) । পরিসংখ্যানগুলিতে মাউস ব্যবহারের মিনিট, মাউস চলার দূরত্ব, কীস্ট্রোক ইত্যাদির মতো জিনিসও অন্তর্ভুক্ত রয়েছে include

অফিসিয়াল সংগ্রহস্থল থেকে এটি ইনস্টল করুন, আপনার মেনু বারে এটি যুক্ত করুন, ডান ক্লিক করুন এবং "পরিসংখ্যান" চয়ন করুন। আপনি যে দিনটি জানতে চান সেটি চয়ন করার জন্য আপনি একটি ক্যালেন্ডার পাবেন। অথবা work / .workrave / ইতিহাসের স্ট্যাটাসে ডেটা দেখুন


1
এটি দেখতে খুব কার্যক্ষম সমাধানের মতো। আমি "মাইক্রোব্রেক" অনুস্মারকগুলি অক্ষম করার একটি উপায় খুঁজে পেতে চাই যা বরং বিরক্তিকর হতে পারে, তবে অন্যথায় এটি যা সন্ধান করছি ঠিক তা জমে উঠেছে। ধন্যবাদ!
jkcunningham

1
@jkcunningham ডান ক্লিক / পছন্দসমূহ ডায়ালগ থেকে মাইক্রোব্রেক, বিশ্রাম বিরতি, বা প্রতিদিনের সীমাটি সক্ষম বা অক্ষম করা সহজ। যদিও অবশ্যই আপনার চোখ, কব্জি, বাহু, পিঠ ইত্যাদির পক্ষে নিয়মিত বিরতি নেওয়া ভাল এবং ওয়ার্করেভ এটি করা সহজ (এমনকি মজাদার) করে এবং মাঝে মাঝে বিরতি স্থগিত করা বা এড়িয়ে যাওয়া সহজ করে দেয় যদি আপনি ঠিক কিছু মাঝখানে।
নীলামকবি

2

আপনি যদি - প্রোফাইলটি সরিয়ে থাকেন তবে আপনি একটি ফর্ম্যাট মিসিং টাইমস্ট্যাম্পগুলি পাবেন, তবে এতে স্ক্রীন ওভারটি সক্রিয় রয়েছে কিনা তা এতে রয়েছে।

$ 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

আমি আমার স্ক্রিনসেভারের উপর ভিত্তি করে জিনিসগুলি সক্রিয় বা নিষ্ক্রিয় করতে এই পিএইচপি স্ক্রিপ্টটির একটি পরিবর্তন ব্যবহার করেছি

#!/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। স্ক্রিনসেভার সক্রিয় থাকাকালীন আমি ক্রোনট্যাব ব্যবহার করে বিটকয়েনগুলিকে সমস্ত 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 সেট না করে ক্রোন থেকে রান করার সময় জিনোম-স্ক্রীনসেভার-কমান্ড স্ক্রিনটি খুঁজে পাবে না। এটি অবশ্যই একই ব্যবহারকারীর হিসাবে লগ ইন করা চালানো উচিত।

2>&1: এটি স্ট্যান্ডার্ড আউটপুটে কোনও ত্রুটি নির্দেশ করে, যা ক্যাপচার করেছে ...

| grep -q 'is active';: -কিউ গ্রেপকে শান্ত করে তোলে, এটি কোনও কিছুই আউটপুট দেয় না। কিন্তু কমান্ডটি একটি সাফল্য বা ব্যর্থতা দেয় যা যদি দ্বারা ব্যবহৃত হয়।

আমি বুঝতে পারছি এগুলির কোনও একটিই সম্পূর্ণ সমাধান নয়, তবে আশা করি তারা আপনাকে শুরু করার পক্ষে যথেষ্ট।


2

এটি আরও সম্পূর্ণ স্ক্রিপ্ট। আপনি প্রতি মিনিটে ক্রোন থেকে এটিকে ট্রিগার করতে পারেন এবং স্ক্রিনসেভার সক্রিয় থাকলে এটি কতক্ষণ সক্রিয় ছিল তা রেকর্ড করবে। এটি নিষ্ক্রিয় হয়ে গেলে এটি শেষ পরিমাপটি গ্রহণ করবে এবং এটিকে ~ / স্ক্রিনসেভার.লগে যুক্ত করবে। যদি আপনি এটি ক্রোন থেকে চালান তবে এটি প্রতিবার স্ক্রিনসেভারটি নিষ্ক্রিয় করলে প্রায় 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 / স্ক্রীনসভেটিভ টাইম লগ হতে দেয় এমন কোনও কোণে সমস্যা হতে পারে। আমার উদ্দেশ্যে এটি প্রায়শই পেতে পারে: #! / বিন / বাশ ## 4 বলে: ## * কাজ করা ## * কাজ করছে না, তবে স্ক্রিনসেভার এখনও সক্রিয় নয় ## * স্ক্রীনসেবর সক্রিয় ## * কম্পিউটার পাওয়ার ব্যর্থতা বা বন্ধ হয়েছে # # আমি প্রথম দুটি রাজ্য রফতানি লগ করতে চাই DISPLAY = ': 0' এসএস_এলজি = 10 যদি জিনোম-স্ক্রীনসেভার-কমান্ড-কি 2> & 1 | গ্রেপ-কিউ 'নিষ্ক্রিয়'; তারপরে ডিএসটিআর = date "+%Y %m %d %H %M প্রতিধ্বনি "$ এসএস_লাগ $ ডিএসটিআর" >> $ {এইচটিডিওএস} /ডাটা / ওয়ার্ক.লগ ফাই
জেক্কুনিংহাম

ঠিক আছে, এটি ভাল কাজ করে না - সম্পাদনার জন্য সর্বোচ্চ 5 মিনিট। এবার আমি সেখানে কোড মার্কডাউন পেয়ে যাব: [কোড] #! / বিন / ব্যাশ # 4 বলেছেন: # * কর্মরত # * নিষ্ক্রিয়, স্ক্রিনসেভার নিষ্ক্রিয় # * স্ক্রিনসেভার সক্রিয় # * কম্পিউটার বন্ধ # আমি প্রথম দুটি লগইন করতে চাই এবং স্ক্রিনসেভার বিলম্ব সেট করে রফতানি DISPLAY = ': 0' এসএস_এলজি = 10 যদি জিনোম-স্ক্রীনসেভার-কমান্ড -১ 2> & 1 | গ্রেপ-কিউ 'নিষ্ক্রিয়'; তারপরে ডিএসটিআর = date "+%Y %m %d %H %M প্রতিধ্বনি "$ এসএস_লাগ $ ডিআরটিআর" >> $ {এইচটিডিওএস S /ডাটা / ওয়ার্ক.লগ ফাই [/ কোড] আমি দিচ্ছি: আপনি কীভাবে একটি মন্তব্যে একটি কোড ব্লক তৈরি করবেন? 4 স্পেস কাজ করে না।
jkcunningham

-1

আমি uptimeকমান্ডটি ব্যবহার করি তবে এটি সিস্টেমের সক্রিয় / নিষ্ক্রিয় সময় দেয় না। আপটাইম নিম্নলিখিত তথ্যের একটি লাইন প্রদর্শন দেয়। বর্তমান সময়, সিস্টেমটি কত দিন চলছে, বর্তমানে কতজন ব্যবহারকারী লগইন করেছেন এবং গত 1, 5 এবং 15 মিনিটের জন্য সিস্টেমের গড় গড় রয়েছে?


আমার বর্তমান আপটাইমটি 81 দিন 23 ঘন্টা 25 মিনিট। আমি আপনাকে আশ্বাস দিচ্ছি যে আমি এতক্ষণ কোনও কম্পিউটারের সামনে বসে নেই। ধন্যবাদ, তবে এটি কার্যকর হবে না। আমি নির্ধারণ করার জন্য একটি উপায় খুঁজছি - মোটামুটিভাবে - আমি প্রতিদিন কতক্ষণ কম্পিউটারের সামনে বসে আছি। এজন্য আমি স্ক্রিনসভারটি সক্রিয় / নিষ্ক্রিয় সময়ে দেখছি।
jkcunningham

এটা ভালো. হ্যাঁ, আমি যেমনটি উল্লেখ করেছি এটি আপনাকে সিস্টেমের সক্রিয় / নিষ্ক্রিয় সময় দেয় না এবং আমি এটি স্ক্রীন ওভার সক্রিয় / নিষ্ক্রিয় সময় থেকে গণনা করার উপায় জানি না।
চেথান এস।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.