วิธีการวัดการใช้งานคอมพิวเตอร์ผ่านหน้าจอที่ใช้งานอยู่ / ไม่ได้ใช้งานเวลา?


15

ฉันกำลังมองหาวิธีง่ายๆในการกำหนดเวลาคร่าวๆต่อวันที่ฉันใช้ไปกับคอมพิวเตอร์ นี่อาจเป็นงานที่ยากหากคุณพยายามตรวจสอบกระบวนการกดปุ่มคลิกเมาส์และสิ่งอื่น ๆ เพราะคุณสามารถทำอะไรก็ได้ตั้งแต่คิดเกี่ยวกับปัญหาการเข้ารหัสอ่านบทความบนเว็บคุยโทรศัพท์หรือออกไปเดินเล่น หมา. คอมพิวเตอร์อ่านใจไม่ออก ตั้งแต่ฉันออกจากคอมพิวเตอร์ในการเข้าสู่ระบบตลอด 24/7 การตรวจสอบจะไม่ทำงาน

ฉันตีความคิดของการเข้าสู่ระบบเท่าใดเวลาที่คอมพิวเตอร์ใช้ในโหมดสกรีนเซฟเวอร์ จากนั้นข้อผิดพลาดของฉันจะไม่ยิ่งใหญ่ไปกว่าผลิตภัณฑ์ของโปรแกรมรักษาหน้าจอที่ไม่ได้ใช้งานโดยมีจำนวนครั้งที่มันเข้าสู่โหมดสกรีนเซฟเวอร์ การลบสิ่งนี้ออกจาก 24 ชั่วโมงจะทำให้ฉันประเมินว่ามันจะสมเหตุสมผลสำหรับวัตถุประสงค์ของฉัน

ปัญหาคือ: ฉันไม่ทราบวิธีการเข้าสู่ระบบเมื่อเปิดและปิดหน้าจอ ฉันกำลังใช้งาน Ubuntu 10.10 ในขณะนี้บนเครื่องส่วนใหญ่กำลังจะเริ่มอัปเกรดเป็น 11.04 ในบางส่วน

ความคิดใด ๆ

[แก้ไข] หลังจาก googling มากขึ้นฉันกดปุ่ม dbus-monitor ซึ่งดูเหมือนว่ามันจะใช้งานได้ แต่ขาดส่วนประกอบที่สำคัญ นี่คือสคริปต์ที่ฉันใช้ซึ่งเปิดใช้งานจอภาพเป็น 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

นี่คือผลลัพธ์ที่มันผลิตหลังจากล็อคและปลดล็อกหน้าจอสองสามครั้ง:

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

เห็นได้ชัดว่าคอลัมน์ที่สองคือ unix UTC ในไม่กี่วินาที ส่วนผสมที่หายไปคือมันไม่ได้ระบุว่าหน้าจอเปิดหรือปิด! ฉันคิดว่าฉันสามารถสันนิษฐานได้ว่าพวกเขาสลับจากเวลา NameAcquired เกิดขึ้น แต่มันทำให้ฉันไม่สบายใจที่อาจมีเหตุการณ์ที่ขาดหายไปหรือเหตุการณ์พิเศษที่ฉันไม่สามารถคาดการณ์ได้

จำเป็นมากสำหรับความคิด

jkcunningham


เป็นเครื่องมือในการจัดการเวลาเช่นหนูแฮมสเตอร์หรือไม่?
นาธานออสมัน

ฉันเพิ่งติดตั้ง ยังไม่ชัดเจนว่าจะจัดการเวลาที่ฉันยังไม่ได้เข้าสู่งานโดยเฉพาะ แต่มันดูน่าสนใจ
jkcunningham

ฉันเคยใช้งานมาแล้วประมาณครึ่งชั่วโมงและดูเหมือนว่ามันจะต้องเริ่มทุกครั้ง นั่นคือข้อเสียเปรียบ ฉันไม่ได้พยายามที่จะตอกย้ำเวลาพูดเพื่อจุดประสงค์ในการชาร์จเพียงแค่ใช้เวลากับคอมพิวเตอร์ และถ้าฉันลืมที่จะเปิดมันในเวลานั้นจะไม่ได้รับการอธิบาย ฉันยังคงเล่นกับมันแม้ว่า
jkcunningham

1
นี่เป็นคำถามที่ดีมากเกี่ยวกับการวัดเวลาที่ใช้ในพีซี ความคิดที่ดีมากเกี่ยวกับสกรีนเซฟเวอร์
Luis Alvarado

ตรวจสอบนี้บน GitHub github.com/nitesh-/hoursboard นี่อาจตอบคำถามของคุณ
Nitesh morajkar

คำตอบ:


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

"การWorkrave " แพคเกจไม่เพียง แต่เพลงไม่ว่าคุณจะใช้คอมพิวเตอร์ของคุณและช่วยให้คุณใช้เวลาพักในระหว่างวัน แต่ยังมีชุดที่ดีของสถิติทั้งดิบ (ในแฟ้มข้อความ) และผ่านทาง GUI ( Daily usage: 5:41:00 for Jul 21) สถิตินี้ยังรวมถึงสิ่งต่างๆเช่นการใช้เมาส์เป็นเวลาระยะทางในการเคลื่อนไหวของเมาส์การกดแป้น ฯลฯ

ติดตั้งจากแหล่งเก็บข้อมูลอย่างเป็นทางการเพิ่มลงในแถบเมนูของคุณคลิกขวาและเลือก "สถิติ" คุณจะได้รับปฏิทินเพื่อเลือกวันที่คุณอยากรู้ หรือดูข้อมูลใน ~ / .workrave / historystats


1
ดูเหมือนว่าเป็นวิธีแก้ปัญหาที่ใช้การได้ดีมาก ฉันต้องการหาวิธีปิดการใช้งานการแจ้งเตือน "microbreak" ซึ่งอาจค่อนข้างน่ารำคาญ แต่อย่างอื่นก็ดูเหมือนจะสะสมสิ่งที่ฉันกำลังมองหา ขอบคุณ!
jkcunningham

1
@jkcunningham มันง่ายที่จะเปิดหรือปิด microbreaks, ตัวหยุดพักหรือขีด จำกัด รายวันจากกล่องโต้ตอบคลิกขวา / การตั้งค่า แม้ว่าแน่นอนว่าเป็นการดีสำหรับดวงตาข้อมือแขนหลังและอื่น ๆ ของคุณเพื่อหยุดพักตามปกติและวิธีการทำงานทำให้ง่าย (สนุกยิ่งขึ้น) ในการทำเช่นนั้นในขณะเดียวกันก็ทำให้เลื่อนหรือข้ามการพักเป็นครั้งคราวได้ง่าย คุณกำลังอยู่ตรงกลางของบางสิ่ง
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 ฉันให้ bitcoin ใช้ทั้ง 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-screensaver-command จะไม่สามารถค้นหาหน้าจอเมื่อเรียกใช้จาก cron สิ่งนี้จะต้องทำงานในฐานะผู้ใช้รายเดียวกันที่ล็อกอิน

2>&1: สิ่งนี้นำข้อผิดพลาดใด ๆ ในการส่งออกมาตรฐานซึ่งถูกจับโดย ...

| grep -q 'is active';: -q ทำให้ grep เงียบมันไม่ส่งผลอะไรเลย แต่คำสั่งส่งคืนความสำเร็จหรือความล้มเหลวที่ใช้โดยถ้า

ฉันรู้ว่าสิ่งเหล่านี้ไม่ได้เป็นคำตอบที่สมบูรณ์ แต่หวังว่าพวกมันจะเพียงพอสำหรับคุณ


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 สถานะ: ## * ทำงาน ## * ไม่ทำงาน แต่สกรีนเซฟเวอร์ยังไม่ทำงาน ## * สกรีนเซฟเวอร์ที่ใช้งานอยู่ ## * คอมพิวเตอร์พลังงานล้มเหลวหรือปิด # # ฉันต้องการบันทึกสองสถานะแรกส่งออก DISPLAY = ': 0' SS_LAG = 10 ถ้า gnome-screensaver-command -q -q 2> & 1 | grep -q 'ไม่ทำงาน'; ดังนั้น DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcunningham

ตกลงนั่นไม่ได้ออกกำลังกายที่ดี - สูงสุด 5 นาทีสำหรับการแก้ไข ในครั้งนี้ฉันจะได้รหัสมาร์กอัปที่นั่น: [รหัส] #! / bin / bash # 4 สถานะ: # * ทำงาน # * ว่าง, สกรีนเซฟเวอร์ไม่ได้ใช้งาน # * สกรีนเซฟเวอร์ที่ใช้งานอยู่ # * คอมพิวเตอร์ปิด # ฉันต้องการบันทึกสองคนแรก และการตั้งค่าหน่วงเวลาสกรีนเซฟเวอร์ส่งออก DISPLAY = ': 0' SS_LAG = 10 ถ้า gnome-screensaver-command -q 2> & 1 | grep -q 'ไม่ทำงาน'; ดังนั้น DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ รหัส] ฉันให้: คุณจะสร้างบล็อกรหัสในความคิดเห็นได้อย่างไร 4 ช่องว่างไม่ทำงาน
jkcunningham

-1

ฉันใช้uptimeคำสั่ง แต่ไม่ได้ให้เวลาแอ็คทีฟ / ไม่ใช้งานของระบบ uptime ให้การแสดงบรรทัดเดียวของข้อมูลต่อไปนี้ เวลาปัจจุบันระยะเวลาที่ระบบใช้งานจำนวนผู้ใช้ที่ล็อกออนอยู่ในขณะนี้และระบบจะโหลดค่าเฉลี่ยสำหรับ 1, 5 และ 15 นาทีที่ผ่านมา


เวลาในปัจจุบันของฉันคือ 81 วัน 23 ชั่วโมง 25 นาที ฉันรับรองว่าคุณไม่ได้นั่งอยู่หน้าคอมพิวเตอร์นานขนาดนั้น ขอบคุณ แต่นั่นไม่ได้ผล ฉันกำลังมองหาวิธีในการพิจารณา - ประมาณ - ระยะเวลาที่ฉันนั่งอยู่หน้าคอมพิวเตอร์ทุกวัน นั่นเป็นเหตุผลที่ฉันกำลังดูหน้าจอที่ใช้งานอยู่ / ไม่ได้ใช้งานครั้ง
jkcunningham

ดีแล้ว. ใช่ดังที่ฉันได้กล่าวไปแล้วว่ามันจะไม่ทำให้คุณมีเวลาใช้งาน / ไม่ได้ใช้งานของระบบและฉันไม่รู้วิธีคำนวณมันจากเวลาที่สกรีนเซฟเวอร์ทำงาน / ไม่ทำงาน
Chethan S.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.