如何在Mavericks上启用/禁用“请勿打扰外壳”?


16

我想使用键盘快捷键在通知中心切换“请勿打扰”。

我正在使用BetterTouchTool提供一些额外的键盘快捷键,但它不支持在默认选项中启用/禁用通知。

它具有执行终端命令的选项,因此我在这里问如何从终端启用/禁用“请勿打扰”?

在带有Automator的OS X Mountain Lion中发现了Schedule'Do Not Disturb'(请勿打扰),我尝试运行命令,但似乎不起作用。


由于您实际上是在问如何通过键盘而不是从外壳完成该操作,因此您可能应该更改问题的标题。或者如果我错了,请纠正我!
webmarc 2014年

其实,没关系...我没有意识到“ betterTouchTool”需要您想要的终端。
webmarc 2014年

我主要问如何从外壳上执行此操作。通过系统偏好设置来解决我的问题,但是知道如何从shell来做会更有趣。
拉兹万2014年

知道了,我用shell信息更新了答案。
webmarc 2014年

Answers:


13

您可以在系统偏好设置->键盘->快捷方式->任务控制中为其设置全局键盘快捷键

或者,如果您绝对希望从命令行使用它,可以使用applescript来执行此操作(假设您设置了要使用的键盘快捷键)cmdshiftoptctrlD

请注意,您仍必须在“系统偏好设置”中设置键盘命令,此命令才能起作用。

将以下脚本放入文件中,例如〜/ dnd.applescript

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

现在,您可以从命令行运行osascript ~/dnd.applescript以切换DND设置。

屏幕截图: 系统偏好设置中的键盘快捷键修改


1
完善!谢谢。希望有更好的方法。
B

哪种方式更好?
webmarc 2014年

1
不必绑定晦涩的键盘快捷键并使用切换osascript
B

我想我想问的是,您的意思是“更有效”还是“更漂亮”。是实用的还是美学的愿望?
webmarc 2014年

很好奇,我没有任何其他建议。
webmarc 2014年

17

从OS X 10.10.3开始,此AppleScript将切换“请勿打扰”。无需键盘快捷键:

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

您可以将其保存为AppleScript并使用来从终端运行它osascript DoNotDisturb.applescript,也可以通过将其包装在Heredoc中,将其包含在Bash脚本中,如下所示:

#!/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

6
这意味着您还可以DoNotDisturb在按住Option键的同时单击菜单栏中最右边的图块进行切换。
拉兹万

2
这不再适用于莫哈韦沙漠。Applescript似乎单击菜单栏项,就好像选项没有按下一样,尽管它不是
Dylanthepiguy

13

您可以使用defaults命令的参数来简化razvanz提供的答案-currentHost

启用请勿打扰:

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

(通过https://heyfocus.com/blog/enabling-do-not-disturb-mode/

禁用请勿打扰:

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

现在,您可以轻松地将其包装为脚本,以启用或禁用“请勿打扰”,该脚本可以在任何人的计算机上运行,​​而不受系统偏好设置的影响。这是如何执行此操作的示例:

#!/bin/bash

set -eou pipefail

# From https://heyfocus.com/enabling-do-not-disturb-mode and
# /apple/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

资料来源:https : //gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9


2
小视觉错误![注意那些看起来像@ color的人]:我试过了,它有点用。我暂停了5分钟的一些通知,然后打开“请勿打扰”通知,然后在“禁用请勿打扰”下运行命令。一方面,该图标仍显示为灰色,但另一方面,它的确似乎可以正常工作-几分钟后弹出了通知。第二项测试:我打开了“请勿打扰通知”(不打sn),并在“禁用请勿打扰”下运行了命令。该图标仍然显示为灰色,但通知突然弹出。
马修·艾维

1
@MatthewElvey可能是从塞拉到高塞拉的转变。我们可能需要找到一种重新加载菜单栏图标的新方法。
瑞安

1
+1表示非Applescript命令!
马特

1
此解决方案在高塞拉利昂/莫哈韦
沙漠地区

8

基于James和Zsolt的回答,我创建了一些脚本来打开或关闭(而不是切换)DND状态。他们也不需要任何键绑定或计算机GUID即可工作。

重要说明:请注意,首次运行这些脚本可能需要运行脚本的应用程序的可访问性权限。如果您未在请求中授予许可,则alt/ option按钮将对系统保持按下状态,您需要注销然后重新登录以“取消按下”它。AppleScript先前的答案也是如此。如果脚本被编辑,则将需要撤消并重新授予权限。使用以下方式授予权限:

System Preferences > Security & Privacy > Accessibility > Add your app

对于macOS Sierra和High Sierra,它是menu bar 1

开启免打扰ON(禁用通知):

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

关闭请勿打扰(启用通知):

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

对于早期版本的macOS,它是menu bar 2

开启免打扰ON(禁用通知):

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

关闭请勿打扰(启用通知):

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

1
这不再适用于莫哈韦沙漠。Applescript似乎单击菜单栏项,就好像选项没有按下一样,即使它没有
Dylanthepiguy

2

时间表请勿打扰

只是要补充一点,您还可以从命令行安排“请勿打扰”,以便每天在设置的时间激活/停用。

设置启用免打扰的时间:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndStart -integer <start_time_in_minutes>

设置禁用 DND的时间:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndEnd -integer <end_time_in_minutes>

注意:<start_time_in_minutes>和替换<end_time_in_minutes>为所需的值(如下所述)。


例:

要将DND安排在每天的15:00开始并在18:30结束,请执行以下操作:

转换15:00和18:30至分钟得到的价值<start_time_in_minutes><end_time_in_minutes>。也就是说,将小时数乘以60,然后加上分钟数。

对于15:00将是:15 * 60 + 0 = 900对于18:30将是:18 * 60 + 30 = 1110。给我们下面的命令:

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

1

在詹姆斯的回答的基础上,我也想指出您还可以确定它是打开还是关闭。因此,以下内容将其关闭,如果已经关闭,则不执行任何操作:

if [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.000-000-000-000.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

您必须将自己的计算机GUID替换为文件名(那里只有一个文件,因此很容易找出来)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.