Как включить / отключить режим «Не беспокоить» из оболочки на Mavericks?

12

Я хотел бы переключить режим «Не беспокоить» в центре уведомлений с помощью сочетания клавиш.

Я использую BetterTouchTool для некоторых дополнительных сочетаний клавиш, но он не поддерживает включение / отключение уведомлений в параметрах по умолчанию.

У него есть опция для выполнения команды терминала, поэтому я спрашиваю здесь, как включить / отключить Не беспокоить с терминала?

Я нашел расписание «Не беспокоить» в OS X Mountain Lion с Automator и попытался запустить команды, но, похоже, оно не сработало.

Разван
источник
Поскольку вы действительно спрашиваете, как это сделать с клавиатуры, а не с оболочки, вам, вероятно, следует изменить заголовок вопроса. Или, если я ошибаюсь, поправьте меня!
вебмарк
На самом деле, не берите в голову ... Я не осознавал, что "betterTouchTool" требует терминала для того, что вы хотите.
вебмарк
Я прежде всего спросил, как это сделать из оболочки. Выполнение этого из системных настроек решает мою проблему, но гораздо интереснее узнать, как это сделать из оболочки.
Разван
Понятно, я обновил свой ответ с информацией оболочки.
вебмарк

Ответы:

10

Вы можете просто настроить глобальное сочетание клавиш для него в Системных настройках -> Клавиатура -> Ярлыки -> Управление полетом

Или, если вы определенно хотите, чтобы это было из командной строки, используйте командный скрипт для яблока (при условии, что вы настроили использование сочетания клавиш) 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.

ScreenCap: Модификация сочетаний клавиш в Системных настройках

webmarc
источник
1
Отлично! Благодарю. Хотелось бы, чтобы был лучший способ.
Будет B
Лучше чем?
вебмарк
1
Не нужно связывать скрытые сочетания клавиш и переключать их с помощью osascript.
Будет ли B
Наверное, я спрашиваю, лучше ли ты имеешь в виду «как более эффективный» или лучше как «более красивый под одеялом». Это практическое или эстетическое желание?
вебмарк
Просто любопытно, у меня нет никаких дополнительных предложений в любом случае.
вебмарк
15

Начиная с 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или включить его в скрипт Bash, заключив его в heredoc, например так:

#!/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клавишу.
Разван
Это больше не работает на Мохаве. Applescript, кажется, щелкает пункт меню, как будто опция не была выключена, даже если это так
Dylanthepiguy
8

Вы можете упростить ответ, который разванц предоставил , используя -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
# 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

Источник: https://gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9

Райан
источник
1
Незначительная визуальная ошибка! [Отмечено для людей, которые выглядят @ цвета]: я попробовал это, и это работает. Я отложил некоторые уведомления на 5 минут, а затем включил функцию «Не беспокоить» для уведомлений, а затем запустил команды в разделе «Отключить функцию« Не беспокоить »». С одной стороны, значок оставался серым, но, с другой стороны, он работал иначе - уведомления появлялись через несколько минут. Второй тест: я включил функцию «Не беспокоить» для уведомлений (без повтора чего-либо) и запустил команды в разделе «Отключить функцию« Не беспокоить »». Значок оставался серым, но уведомления появлялись прямо вверх.
Мэтью Элви
1
@MatthewElvey Это может быть изменение с Сьерры на Высшую Сьерру. Вероятно, нам нужно найти новый способ перезагрузить иконку меню.
Райан
1
+1 для не-Applescript команды!
Мэтт
1
Dnd, кажется, не изменяется на высоких сьерра / мохаве с этим решением
Dylanthepiguy
7

Основываясь на ответах Джеймса и Жолта, я создал несколько сценариев для включения или выключения (не переключения) состояния 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

Включить Не беспокоить OFF (включение уведомлений):

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

Включить Не беспокоить OFF (включение уведомлений):

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
sv3k
источник
Это больше не работает на Мохаве. Applescript, кажется, щелкает пункт меню, как если бы опция не была выключена, даже если это так
Dylanthepiguy
1

Расписание не беспокоить

Просто добавьте, что вы также можете запланировать Не беспокоить из командной строки, чтобы активировать / деактивировать каждый день в установленное время.

Чтобы установить время, когда DND будет включен :

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 NotificatioCenter so that it reads the DND change
Z0B
источник
0

Опираясь на ответ Джеймса, я также хотел бы отметить, что вы также можете определить, включен он или выключен. Таким образом, следующее отключает его и ничего не делает, если оно уже выключено:

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 своего собственного компьютера в имя файла (там есть только один файл, так что это легко понять)

Жолт Сатмари
источник