#
# From: http://www.dssw.co.uk/blog/2015-01-21-inactivity-and-idle-time
# Returns seconds system is idle, ie no user input...
#
set cmd to "echo $((`ioreg -w 0 -c IOHIDSystem | sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))"
#
# How many seconds user can be idle before we log them out
#
set maxIdleAllowed to 60
#
# How frequently we check the idle time, in seconds...
#
set checkInterval to 30
#
# We loop forever...
#
repeat
set secsIdle to 0
try
set answer to (do shell script cmd)
set secsIdle to (answer as number)
on error
# May want to do something fancy here...
exit repeat
end try
log secsIdle
if secsIdle > maxIdleAllowed then
logUserOut()
end if
delay checkInterval
end repeat
on logUserOut()
# Exclude Finder at minimum because bad things happen, so I am told...
set excludedApps to {"Finder"}
tell application "System Events"
#set oAppList to get id of every application process whose background only is false
set {processList, idList, pidList, bidList} to the {name, id, unix id, bundle identifier} of (every application process whose background only is false)
end tell
set i to 0
repeat with p in processList
set i to i + 1
log "ID: " & item i of idList
log "PID:" & item i of pidList
log "Name: " & p
log "Bundle: " & item i of bidList
if p is not in excludedApps then
try
log "Quit with out saving app with id: " & item i of idList
# timeout to prevent blocking by certain apps...
with timeout of 1 second
# Use bundle id for some odd apps... soffice i'm talking to you!?!
tell application id (item i of bidList) to quit saving no
end timeout
on error
try
log "Giving up, killing pid: " & (item i of pidList)
do shell script "kill " & (item i of pidList)
end try
end try
end if
delay checkInterval1
log "" & return
end repeat
# Finally, with all apps closed, kill our session...
tell application "loginwindow" to «event aevtrlgo»
end logUserOut
How can I automatically launch an application whenever the Mac goes idle?
EDIT2: There you go. Added routine to close apps nicely if possible, and if not, kill them and logs out.