Cách đo mức độ sử dụng máy tính thông qua trình bảo vệ màn hình kích hoạt / không hoạt động?


15

Tôi đang tìm kiếm một cách đơn giản để xác định lượng thời gian mỗi ngày tôi dành cho máy tính. Đây có thể là một nhiệm vụ khó khăn nếu bạn cố gắng theo dõi các quy trình, nhấn phím, nhấp chuột và những thứ tương tự, bởi vì người ta có thể làm bất cứ điều gì từ suy nghĩ về một vấn đề mã hóa, đọc một bài báo trên web, nói chuyện điện thoại hoặc đi bộ chó. Máy tính không thể đọc được suy nghĩ của tôi. Vì tôi để máy tính theo dõi đăng nhập 24/7 sẽ không hoạt động.

Tôi nghĩ đến việc đăng nhập bao nhiêu thời gian máy tính dành cho chế độ bảo vệ màn hình. Lỗi của tôi sau đó sẽ không lớn hơn sản phẩm của trình bảo vệ màn hình nhàn rỗi với số lần chuyển sang chế độ bảo vệ màn hình. Trừ đi điều này từ 24 giờ sẽ cho tôi một ước tính sẽ hợp lý cho mục đích của tôi.

Vấn đề là: Tôi không biết cách đăng nhập khi bật và tắt trình bảo vệ màn hình. Hiện tại tôi đang chạy Ubuntu 10.10 trên hầu hết các máy, sắp bắt đầu nâng cấp lên 11.04 trên một số máy.

Có ý kiến ​​gì không?

[sửa] Sau khi googling nhiều hơn, tôi nhấn vào màn hình dbus trông giống như nó có thể hoạt động, nhưng thiếu một thành phần quan trọng. Đây là đoạn script tôi đang chạy để khởi chạy màn hình dưới dạng 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

Đây là đầu ra mà nó tạo ra sau khi khóa và mở khóa màn hình một vài lần:

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

Cột thứ hai rõ ràng là unix UTC trong vài giây. Thành phần còn thiếu là nó không xác định được trình bảo vệ màn hình đang bật hay tắt! Tôi cho rằng tôi có thể cho rằng họ chuyển đổi từ thời điểm NameAcquired xảy ra, nhưng điều đó khiến tôi lo lắng rằng có thể có một sự kiện mất tích hoặc thêm mà tôi không thể lường trước được sẽ khiến mọi thứ không đồng bộ.

Nhiều nghĩa vụ cho ý tưởng.

jkcastyham


Các công cụ quản lý thời gian như Hamster có phải là một lựa chọn không?
Nathan Osman

Tôi chỉ cần cài đặt nó. Không rõ làm thế nào nó sẽ xử lý thời gian tôi chưa đăng nhập cụ thể vào các nhiệm vụ, nhưng nó có vẻ thú vị.
jkcastyham

Tôi đã có nó bây giờ được nửa giờ hoặc lâu hơn và có vẻ như nó yêu cầu nó phải được bắt đầu mỗi lần. Đó là một nhược điểm. Tôi không cố gắng để xem thời gian cụ thể cho mục đích sạc, chỉ là thời gian ở máy tính. Và nếu tôi quên bật nó vào thời gian đó sẽ không được tính. Tôi vẫn đang chơi với nó mặc dù.
jkcastyham

1
Đây là một câu hỏi rất hay liên quan đến việc đo thời gian dành cho PC. Ý tưởng rất hay về trình bảo vệ màn hình.
Luis Alvarado

Kiểm tra điều này trên github github.com/nitesh-/hoursboard . Điều này có thể trả lời câu hỏi của bạn
Nitesh morajkar

Câu trả lời:


4

Tôi muốn cảm ơn và đóng góp lại một tập lệnh thô đơn giản (có thể được cải thiện), đưa nó vào các ứng dụng khởi động với:

xterm -e logSessionLock.sh

đó là sự cố hệ thống / mất điện chuẩn bị quá. Nó không được thử nghiệm nặng nề ... nhưng hiện đang hoạt động rất tốt. nó sẽ tạo 2 tệp, một tệp tại $ HOME (nhật ký) một tệp khác tại / tmp (cách khắc phục sự cố 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

nhật ký là như thế này:

 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

Gói " Workrave " không chỉ theo dõi xem bạn có đang sử dụng máy tính hay không và giúp bạn nghỉ ngơi trong ngày, mà còn cung cấp một bộ thống kê đẹp, cả thô (trong tệp văn bản) và qua GUI ( Daily usage: 5:41:00 for Jul 21). Các số liệu thống kê cũng bao gồm những thứ như phút sử dụng chuột, khoảng cách di chuyển chuột, tổ hợp phím, v.v.

Cài đặt nó từ kho chính thức, thêm nó vào thanh menu của bạn, nhấp chuột phải và chọn "thống kê". Bạn sẽ nhận được một lịch để chọn ngày bạn muốn biết. Hoặc xem dữ liệu trong ~ / .workrave / historystats


1
Điều này có vẻ như một giải pháp rất khả thi. Tôi muốn tìm cách vô hiệu hóa lời nhắc "microbreak" có thể gây phiền nhiễu, nhưng nếu không, nó dường như tích lũy đúng thứ tôi đang tìm kiếm. Cảm ơn!
jkcastyham

1
@jkcastyham Thật dễ dàng để bật hoặc tắt các vi phạm, nghỉ ngơi hoặc giới hạn hàng ngày từ hộp thoại Nhấp chuột phải / Tùy chọn. Mặc dù, tất nhiên, tốt cho mắt, cổ tay, cánh tay, lưng, v.v ... của bạn để thực sự nghỉ ngơi thường xuyên, và làm việc giúp bạn dễ dàng (thậm chí vui vẻ) trong khi cũng dễ dàng trì hoãn hoặc bỏ qua việc nghỉ thỉnh thoảng bạn đang ở giữa một cái gì đó
nealmcb

2

Nếu bạn xóa --profile, bạn sẽ nhận được một định dạng thiếu dấu thời gian, nhưng nó có hay không trình bảo vệ màn hình có hoạt động hay không.

$ 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

Tôi đã sử dụng một sửa đổi của tập lệnh PHP này để kích hoạt hoặc hủy kích hoạt mọi thứ dựa trên trình bảo vệ màn hình của tôi

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

Tùy chọn khác là sử dụng gnome-screensaver-command --query. Sử dụng crontab Tôi cho phép bitcoin sử dụng cả 4 lõi khi trình bảo vệ màn hình hoạt động, nhưng nó chỉ nhận được 1 lõi khi tôi sử dụng máy tính của mình.

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

HIỂN THỊ: Nếu không thiết lập lệnh HIỂN THỊ gnome-Screensaver-lệnh sẽ không thể tìm thấy màn hình khi chạy từ cron. Điều này phải chạy khi cùng một người dùng đăng nhập.

2>&1: Điều này hướng bất kỳ lỗi nào vào đầu ra tiêu chuẩn, được ghi lại bởi ...

| grep -q 'is active';: -q làm cho grep yên lặng, nó không tạo ra bất cứ điều gì. Nhưng lệnh trả về thành công hay thất bại được sử dụng bởi if.

Tôi nhận ra không có giải pháp nào trong số này là một giải pháp hoàn chỉnh, nhưng hy vọng chúng đủ để giúp bạn bắt đầu.


2

Đây là một kịch bản đầy đủ hơn. Bạn có thể kích hoạt nó từ cron mỗi phút và nếu trình bảo vệ màn hình hoạt động, nó sẽ ghi lại thời gian hoạt động. Khi nó hủy kích hoạt, nó sẽ thực hiện phép đo cuối cùng và thêm nó vào ~ / Screensaver.log. Nếu bạn chạy nó từ cron, nó có thể không chính xác tới 59 giây mỗi lần trình bảo vệ màn hình tắt.

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

Tôi thích cách tiếp cận này. Có thể xảy ra sự cố ở góc nếu máy bị hỏng trong khi ở chế độ bảo vệ màn hình để lại trạng thái treo / tmp / Screensaveractivetime được ghi lại. Đối với mục đích của tôi, điều này sẽ giải quyết xung quanh nó: #! / Bin / bash ## 4 trạng thái: ## * làm việc ## * không hoạt động, nhưng trình bảo vệ màn hình chưa hoạt động # Tôi muốn đăng nhập hai trạng thái đầu tiên xuất khẩu HIỂN THỊ = ': 0' SS_LAG = 10 nếu gnome-Screensaver-lệnh -q 2> & 1 | grep -q 'không hoạt động'; sau đó DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi
jkcastyham

Được rồi, điều đó đã không tập luyện tốt - tối đa 5 phút cho các chỉnh sửa. Lần này tôi sẽ nhận được mã đánh dấu ở đó: [code] #! / Bin / bash # 4 trạng thái: # * làm việc # * nhàn rỗi, trình bảo vệ màn hình không hoạt động # * màn hình hoạt động # * tắt máy tính # Tôi muốn đăng nhập hai cái đầu tiên và cài đặt độ trễ của trình bảo vệ màn hình xuất HIỂN THỊ = ': 0' SS_LAG = 10 nếu gnome-Screensaver-lệnh -q 2> & 1 | grep -q 'không hoạt động'; sau đó DSTR = date "+%Y %m %d %H %M echo "$ SS_LAG $ DSTR" >> $ {HTDOCS} /data/work.log fi [/ code] Tôi đưa ra: làm thế nào để bạn tạo một khối mã trong một nhận xét? 4 không gian không hoạt động.
jkcastyham

-1

Tôi sử dụng uptimelệnh, nhưng nó không cho thời gian hoạt động / không hoạt động của hệ thống. thời gian hoạt động sẽ hiển thị một dòng thông tin sau. Thời gian hiện tại, hệ thống đã chạy được bao lâu, có bao nhiêu người dùng hiện đang đăng nhập và trung bình tải hệ thống trong 1, 5 và 15 phút qua.


Thời gian hoạt động hiện tại của tôi là 81 ngày 23 giờ 25 phút. Tôi đảm bảo với bạn rằng tôi đã không ngồi trước máy tính lâu như vậy. Cảm ơn, nhưng điều đó sẽ không làm việc. Tôi đang tìm cách để xác định - đại khái - tôi ngồi trước máy tính bao lâu hàng ngày. Đó là lý do tại sao tôi nhìn vào thời gian kích hoạt / không hoạt động của trình bảo vệ màn hình.
jkcastyham

Điều đó thật tốt. Vâng, như tôi đã đề cập, nó sẽ không cung cấp cho bạn thời gian hoạt động / không hoạt động của hệ thống và tôi không biết cách tính toán nó từ thời gian kích hoạt / không hoạt động của trình bảo vệ màn hình.
Chethan S.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.