通过屏幕保护程序活动/非活动时间测量计算机使用情况的方法?

jkc*_*ham 15 screensaver log

我正在寻找一种简单的方法来确定我每天花在电脑上的粗略时间。如果您试图监控进程、按键、鼠标点击等,这可能是一项艰巨的任务,因为人们可以做任何事情,从思考编码问题、阅读网络文章、打电话或走开狗。电脑无法读懂我的心思。由于我将计算机置于 24/7 监控登录状态将不起作用。

我想到了记录计算机在屏幕保护模式下花费的时间的想法。我的错误不会大于屏幕保护程序空闲时间与其进入屏幕保护程序模式次数的乘积。从 24 小时中减去这个时间会给我一个对我的目的来说是合理的估计。

问题是:当屏幕保护程序打开和关闭时,我不知道如何登录。我目前在大多数机器上运行 Ubuntu 10.10,即将开始在其中一些机器上升级到 11.04。

有任何想法吗?

[编辑] 经过更多的谷歌搜索后,我发现了 dbus-monitor,它看起来可以工作,但缺少一个重要的组成部分。这是我正在运行的脚本,它将监视器作为守护程序启动:

#!/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
Run Code Online (Sandbox Code Playgroud)

这是它在锁定和解锁屏幕几次后产生的输出:

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
Run Code Online (Sandbox Code Playgroud)

第二列显然是以秒为单位的unix UTC。缺少的成分是它无法识别屏幕保护程序是打开还是关闭!我想我可以假设它们从 NameAcquired 发生的时间开始切换,但这让我感到不安,因为可能有一个我无法预料的丢失或额外的事件,这会使一切不同步。

非常有想法。

坎宁安

Asa*_*ers 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
Run Code Online (Sandbox Code Playgroud)

我使用了此 PHP 脚本的修改版来根据我的屏幕保护程序激活或停用某些内容

$ 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
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用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
Run Code Online (Sandbox Code Playgroud)

DISPLAY:如果不设置 DISPLAY,gnome-screensaver-command 在从 cron 运行时将无法找到屏幕。这必须以同一用户登录的身份运行。

2>&1:这会将任何错误定向到标准输出,该输出由...捕获

| grep -q 'is active';: -q 使 grep 安静,它不输出任何内容。但该命令返回 if 使用的成功或失败。

我意识到这些都不是完整的解决方案,但希望它们足以帮助您入门。


Che*_* S. -1

我使用uptime命令,但它没有给出系统的活动/非活动时间。uptime 会以一行显示以下信息。当前时间、系统运行时长、当前登录用户数以及过去1、5、15分钟的系统负载平均值。