How to enable/disable Do Not Disturb from shell on Mavericks?
I would like to toggle the Do Not Disturb in the notification center with a keyboard shortcut.
I am using BetterTouchTool for some extra keyboard shortcuts but it does not support enabling/disabling the notifications in the default options.
It has an option for executing a terminal command so I'm asking here how to enable/disable Do Not Disturb from the terminal?
I found Schedule ‘Do Not Disturb’ In OS X Mountain Lion With Automator and I tried to run the commands but it didn't seem to work.
Solution 1:
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:
Solution 2:
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
Solution 3:
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
Solution 4:
Building on answers from James and Zsolt, I've created a couple of scripts to turn on or off (not toggle) DND state. They also don't require any key bindings or machine GUID to work.
IMPORTANT: Please note that running these scripts for the first time may require accessibility permission for the app which runs the scripts. If you do not grant the permission in the request the alt/option button will remain pressed for the system and you will need to log out and back in to "unpress" it. This is also true for previous answers with AppleScript. If the script is edited, the permissions will need to be revoked and re-granted. Permissions are granted using:
System Preferences > Security & Privacy > Accessibility > Add your app
For macOS Sierra and High Sierra it's menu bar 1
:
Turn Do Not Disturb ON (disable notifications):
if [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
osascript <<EOD
tell application "System Events" to tell process "SystemUIServer"
key down option
click menu bar item 1 of menu bar 1
key up option
end tell
EOD
fi
Turn Do Not Disturb OFF (enable notifications):
if ! [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
osascript <<EOD
tell application "System Events" to tell process "SystemUIServer"
key down option
click menu bar item 1 of menu bar 1
key up option
end tell
EOD
fi
For earlier versions of macOS it's menu bar 2
:
Turn Do Not Disturb ON (disable notifications):
if [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
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
fi
Turn Do Not Disturb OFF (enable notifications):
if ! [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
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
fi
Solution 5:
Schedule Do Not Disturb
Just to add that you can also schedule Do Not Disturb from the command line to activate/deactivate each day at set times.
To set the time when DND will be enabled:
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndStart -integer <start_time_in_minutes>
To set the time when DND will be disabled:
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndEnd -integer <end_time_in_minutes>
NOTE: replace <start_time_in_minutes>
and <end_time_in_minutes>
with the desired value (explained below).
Example:
To schedule DND to start each day at 15:00 and to end at 18:30 do the following:
Convert 15:00 and 18:30 to minutes to get the value of <start_time_in_minutes>
and <end_time_in_minutes>
. That is, multiply the number of hours by 60 and add the number of minutes.
For 15:00 that would be: 15 * 60 + 0 = 900
and for 18:30 that would be: 18 * 60 + 30 = 1110
. Giving us the commands below:
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndStart -integer 900
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndEnd -integer 1110
killall NotificationCenter # 'resets' Notificatio Center so that it reads the DND change