How can I see how long my computer has been active (as in not idle)

I've seen a variety of solutions to check how long my machine has been idle, and I know I can check how long since last reboot with uptime, but I'm curious if there's a way to see how long since my computer was last idle. Maybe since the last time the power save settings kicked in, or last time since the screensaver turned on / monitor turned off, etc?

I'm fine using an applescript or shell command to determine this, if those are the best solutions.


You can also find the idle time in UNIX by running

ioreg -c IOHIDSystem

And looking for the returned HIDIdleTime

Or you could run a shell script on idle like so, just call it every 30 seconds or so using LaunchD. Make sure to put the launchd xml file in /Library/LaunchDaemons so it runs even when no user is logged in, or /Library/LaunchAgents/ if you only want it to run when someone is logged into the machine.

#!/bin/bash
idl=$"`ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print int($NF/1000000000); exit}'`"
idletime="600"
if [ $idl -gt $idletime ]; then
#Your
#Code
#Here
fi

You can use the following script to show the idle seconds ticking up, from Inactivity and Idle Time on OS X:

#!/usr/bin/env perl
my $idle_seconds_command = 'echo $((`ioreg -c IOHIDSystem | sed -e \'/HIDIdleTime/ !{ d\' -e \'t\' -e \'}\' -e \'s/.* = //g\' -e \'q\'` / 1000000000))';
print "Counting seconds of inactivity... Command + Period (.) to quit\n\n";
do {
    my $idle_seconds = `$idle_seconds_command`;
    chomp($idle_seconds);
    print "Idle for $idle_seconds seconds.\n";
    sleep(1);
} while(1);

When run the script prints a line each second showing the current idle time counter.

Idle seconds on OS X


You can use an applescript.

on idle display dialog "Hey, your computer wasn't busy so I thought I would higjack it" end idle

Save it as an application and keep it running in the background. Maybe just write a timestamp to a file to read later?