Sleepwatcher:Mac睡眠与唤醒自动执行命令
原贴地址:
Sleepwatcher 是一个可以再mac睡眠和唤醒时自动执行命令行脚本的工具,下文两部分分别描述了这个工具的安装与设置方法,在实际的使用中不仅可以执行bash脚本,而且可以执行Applescript命令,使用起来十分方便。
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 beginning sudo -v # Keep-alive: update existing `sudo` time stamp until `.osx` has finished while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & # unload launch agents sudo 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 launchagents sudo rm -f /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist rm -f ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist # remove executable and man files sudo rm -f /usr/local/sbin/sleepwatcher sudo rm -f /usr/local/share/man/man8/sleepwatcher.8 # download sleepwatcher package, untar, and cd into directory curl --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 installation sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8 # move files into installation folders sudo 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 agent sudo launchctl load -w -F /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist # create script in local user directory and make them executable sudo 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.
Configuration
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.
#!/bin/sh osascript -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.