Ask Different is a question and answer site for power users of Apple hardware and software. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question
What do you mean with idle? When it went to sleep? – Gerry Jul 18 '12 at 15:00
@Gerry Sleep, monitor dim, screen saver, anything really. Preferably, I'd like to see "time since user last did not enter input (key or mouse) for 1 minute". – hookedonwinter Jul 18 '12 at 15:02

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.

idl=$"`ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print int($NF/1000000000); exit}'`"
if [ $idl -gt $idletime ]; then
share|improve this answer

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?

share|improve this answer

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`;
    print "Idle for $idle_seconds seconds.\n";
} while(1);

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

Idle seconds on OS X

share|improve this answer

Here is an example LaunchD XML file.

Either place it in /Library/LaunchDaemons/ if you want it to run even when nobody is logged in or in /Library/LaunchAgents/ if you only want it to run when someone is logged into the machine.

Place your script in /Library/Scripts/

You need to make sure your LaunchD plist file is owner root, group wheel and permissions 644.

chown root /Library/LaunchDaemons/
chgrp wheel /Library/LaunchDaemons/
chown 644 /Library/LaunchDaemons/
share|improve this answer
You should edit your original answer instead of replying multiple times. – Gerry Jul 18 '12 at 15:57

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.