Apple - How to enable/disable Do Not Disturb from shell on Mavericks?

As of OS X 10.10.3, this AppleScript will toggle "Do Not Disturb." No keyboard shortcut required:

tell application "System Events" to tell process "SystemUIServer"
  key down option
  click menu bar item 1 of menu bar 2
  key up option
end tell

You can save it as an AppleScript and run it from the terminal with osascript DoNotDisturb.applescript, or you can include it in a Bash script by wrapping it in in a heredoc like so:

#!/bin/bash
osascript <<EOD
  tell application "System Events" to tell process "SystemUIServer"
    key down option
    click menu bar item 1 of menu bar 2
    key up option
  end tell
EOD

You can simplify the answer that razvanz provided by using the -currentHost argument to the defaults command.

Enable Do Not Disturb:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean true
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturbDate -date "`date -u +\"%Y-%m-%d %H:%M:%S +0000\"`"
killall NotificationCenter

(via https://heyfocus.com/blog/enabling-do-not-disturb-mode/)

Disable Do Not Disturb:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean false
killall NotificationCenter

Now you could easily wrap this up as a script to enable or disable "Do Not Disturb" as a script that would work on anybody's machine regardless of system preferences. Here is an example of how to do that:

#!/bin/bash

set -eou pipefail

# From https://heyfocus.com/enabling-do-not-disturb-mode and
# https://apple.stackexchange.com/questions/145487

if [[ $(defaults -currentHost read ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb) -eq 0 ]]; then
  defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean true
  defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturbDate -date "`date -u +\"%Y-%m-%d %H:%M:%S +000\"`"
  killall NotificationCenter
  echo "Do Not Disturb is enabled. Run $0 to turn it off (OS X will turn it off automatically tomorrow)."
else
  defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean false
  killall NotificationCenter
  echo "Do Not Disturb is disabled. Run $0 to turn it on again."
fi

Source: https://gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9


You can just setup a global keyboard shortcut for it in System Preferences -> Keyboard -> Shortcuts -> Mission Control

Or if you definitely want it from the command line, an applescript to do this (assuming you setup the keyboard shortcut to use cmdshiftoptctrlD.

Note that you still MUST setup a keyboard command in System Preferences for this to work.

Put the below script into a file, say, ~/dnd.applescript

ignoring application responses
    tell application "System Events" to keystroke "D" using {command down, shift down, option down, control down}
end ignoring

Now you can run osascript ~/dnd.applescript from the command line to toggle your DND setting.

Screencap: Keyboard shortcut modification in System Preferences