Sleepwatcher is a Mac OS X background daemon that can trigger a script to run when various power related events occur, such as the laptop sleeping or waking up, the screen dimming, or power adapter being connected or disconnected.
On my personal laptop, I have an AppleScript set up within sleepwatcher that mutes the audio each time the laptop goes to sleep. This is to prevent accidental audio playing during meetings and classes.
Setup
Below is setup script for sleepwatcher that I have written that installs it automatically as a system wise daemon.
#!/bin/bash# acquire sudo at the beginningsudo -v
# Keep-alive: update existing `sudo` time stamp until `.osx` has finishedwhile true; do sudo -n true; sleep 60; kill -0 "$$"||exit; done 2>/dev/null &
# unload launch agentssudo launchctl unload /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist 2>/dev/null
launchctl unload ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist 2>/dev/null
# remove plist launchagentssudo rm -f /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist
rm -f ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist
# remove executable and man filessudo rm -f /usr/local/sbin/sleepwatcher
sudo rm -f /usr/local/share/man/man8/sleepwatcher.8
# download sleepwatcher package, untar, and cd into directorycurl --remote-name "http://www.bernhard-baehr.de/sleepwatcher_2.2.tgz"tar xvzf sleepwatcher_2.2.tgz 2>/dev/null
cd sleepwatcher_2.2
# create folders necessary for installationsudo mkdir -p /usr/local/sbin /usr/local/share/man/man8
# move files into installation folderssudo cp sleepwatcher /usr/local/sbin
sudo cp sleepwatcher.8 /usr/local/share/man/man8
sudo cp config/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist
sleep 1
# load launch agentsudo launchctl load -w -F /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist
# create script in local user directory and make them executablesudo touch /etc/rc.wakeup
sudo touch /etc/rc.sleep
sudo chmod +x /etc/rc.sleep /etc/rc.wakeup
The script begins with deleting any old version of sleepwatcher on the computer. It them moves onto downloading the package and copying the files into the appropriate places. It loads the launch daemon then creates two files, /etc/rc.sleep and /etc/rc.wakeup. These get run at their respective times, when the laptop is going to sleep or waking up.
My personal /etc/rc.wakeup script is shown below. All it does is run the short AppleScript command of setting the volume to zero. To get this functionality on your computer, just copy the code below into your own /etc/rc.wakeup.
/etc/rc.wakeup
12
#!/bin/shosascript -e 'set volume 0'
Other possible uses for sleepwatcher include updating a DNS record on wakeup, opening up specific applications for a user, and of course running another script of the user’s choice.