Wie aktiviere / deaktiviere "Nicht von der Shell stören" auf Mavericks?

16

Ich möchte die Option Nicht stören im Benachrichtigungscenter mit einer Tastenkombination umschalten.

Ich verwende BetterTouchTool für einige zusätzliche Tastaturkürzel, aber es unterstützt nicht das Aktivieren / Deaktivieren der Benachrichtigungen in den Standardoptionen.

Es gibt eine Option zum Ausführen eines Terminalbefehls, daher frage ich hier, wie Sie "Nicht vom Terminal stören" aktivieren / deaktivieren können.

Ich habe in OS X Mountain Lion mit Automator den Zeitplan "Nicht stören" gefunden und versucht, die Befehle auszuführen, aber es schien nicht zu funktionieren.

Razvan
quelle
Da Sie wirklich fragen, wie Sie dies über eine Tastatur und nicht über die Shell erledigen können, sollten Sie wahrscheinlich den Titel der Frage ändern. Oder wenn ich falsch liege, bitte korrigieren Sie mich!
Webmarc
Eigentlich egal ... Ich wusste nicht, dass "betterTouchTool" das Terminal für das benötigt, was Sie wollen.
Webmarc
Ich habe hauptsächlich gefragt, wie es aus der Shell geht. Wenn ich es über die Systemeinstellungen mache, ist mein Fall gelöst, aber es macht mehr Spaß zu wissen, wie man es über die Shell macht.
Razvan
Gotcha, ich habe meine Antwort mit den Shell-Informationen aktualisiert.
Webmarc

Antworten:

13

Sie können einfach eine globale Tastenkombination dafür in den Systemeinstellungen -> Tastatur -> Tastenkombinationen -> Missionssteuerung einrichten

Oder wenn Sie es definitiv über die Befehlszeile möchten, verwenden Sie dazu ein Applescript (vorausgesetzt, Sie richten die zu verwendende Tastenkombination ein cmdshiftoptctrlD.

Beachten Sie, dass Sie in den Systemeinstellungen weiterhin einen Tastaturbefehl einrichten MÜSSEN, damit dies funktioniert.

Fügen Sie das folgende Skript in eine Datei ein, z. B. ~ / dnd.applescript

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

Jetzt können Sie über osascript ~/dnd.applescriptdie Befehlszeile Ihre DND-Einstellung umschalten.

Screencap: Änderung der Tastaturkürzel in den Systemeinstellungen

Webmarc
quelle
1
Perfekt! Vielen Dank. Ich wünschte, es gäbe einen besseren Weg.
Will B
Besser auf welche Weise?
Webmarc
1
Sie müssen keine obskure Tastenkombination binden und diese umschalten osascript.
Will B
Ich frage mich wohl, ob Sie es besser meinen als "effektiver" oder besser als "hübscher unter der Decke". Ist es ein praktischer oder ästhetischer Wunsch?
Webmarc
Nur neugierig, ich habe so oder so keine zusätzlichen Vorschläge.
Webmarc
17

Ab OS X 10.10.3 schaltet dieses AppleScript "Nicht stören" um. Keine Tastenkombination erforderlich:

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

Sie können es als AppleScript speichern und vom Terminal aus ausführen osascript DoNotDisturb.applescriptoder es in ein Bash-Skript aufnehmen, indem Sie es wie folgt in einen Heredoc einbinden:

#!/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
James
quelle
6
Dies bedeutet, dass Sie auch umschalten können, DoNotDisturbindem Sie bei Optiongedrückter Taste auf die Kacheln ganz rechts in der Menüleiste klicken .
Razvan
2
Dies funktioniert bei Mojave nicht mehr. Applescript scheint auf den Menüleistenpunkt zu klicken, als ob die Option nicht
deaktiviert wäre
13

Sie können die Antwort von razvanz vereinfachen , indem Sie das -currentHostArgument für den Standardbefehl verwenden .

Aktivieren Nicht stören:

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

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

Deaktivieren Nicht stören:

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

Jetzt können Sie dies einfach als Skript zusammenfassen, um "Nicht stören" als Skript zu aktivieren oder zu deaktivieren, das unabhängig von den Systemeinstellungen auf jedem Computer funktioniert. Hier ist ein Beispiel dafür:

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

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

Ryan
quelle
2
Kleiner visueller Fehler! [Bekannt für Leute, die @ color aussehen]: Ich habe es versucht und es funktioniert irgendwie. Ich habe einige Benachrichtigungen für 5 Minuten deaktiviert und dann "Nicht für Benachrichtigungen stören" aktiviert und dann die Befehle unter "Deaktivieren, nicht stören" ausgeführt. Einerseits blieb das Symbol ausgegraut, andererseits schien es anders zu funktionieren - Benachrichtigungen tauchten in wenigen Minuten auf. Zweiter Test: Ich habe "Nicht für Benachrichtigungen stören" aktiviert (ohne etwas zu dösen) und die Befehle unter "Deaktivieren, nicht stören" ausgeführt. Das Symbol blieb ausgegraut, aber Benachrichtigungen wurden sofort angezeigt.
Matthew Elvey
1
@MatthewElvey Das könnte ein Wechsel von Sierra zu High Sierra sein. Wir müssen wahrscheinlich einen neuen Weg finden, um das Menüleisten-Symbol neu zu laden.
Ryan
1
+1 für Nicht-Applescript-Befehl!
Matt
1
Dnd scheint mit dieser Lösung auf High Sierra / Mojave nicht verändert zu sein
Dylanthepiguy
8

Aufbauend auf den Antworten von James und Zsolt habe ich einige Skripte erstellt, um den DND-Status ein- oder auszuschalten (nicht umzuschalten). Sie benötigen auch keine Tastenkombinationen oder Maschinen-GUIDs, um zu funktionieren.

WICHTIG : Bitte beachten Sie, dass für das erstmalige Ausführen dieser Skripte möglicherweise eine Zugriffsberechtigung für die App erforderlich ist, in der die Skripte ausgeführt werden. Wenn Sie die Berechtigung in der Anforderung nicht erteilen, bleibt die Schaltfläche alt/ optionfür das System gedrückt, und Sie müssen sich abmelden und wieder anmelden, um sie zu "entdrücken". Dies gilt auch für frühere Antworten mit AppleScript. Wenn das Skript bearbeitet wird, müssen die Berechtigungen widerrufen und erneut erteilt werden. Berechtigungen werden erteilt mit:

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

Für macOS Sierra und High Sierra ist es menu bar 1:

Schalten Sie Do Not Disturb ON (Benachrichtigungen deaktivieren):

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

Schalten Nicht stören AUS (Aktivierung von Benachrichtigungen):

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

Für frühere Versionen von macOS gilt Folgendes menu bar 2:

Schalten Sie Do Not Disturb ON (Benachrichtigungen deaktivieren):

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

Schalten Nicht stören AUS (Aktivierung von Benachrichtigungen):

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
quelle
1
Dies funktioniert bei Mojave nicht mehr. Applescript scheint auf den Menüleistenpunkt zu klicken, als ob die Option nicht
deaktiviert wäre
2

Zeitplan Nicht stören

Nur um hinzuzufügen, dass Sie auch "Nicht stören" über die Befehlszeile planen können, um jeden Tag zu festgelegten Zeiten zu aktivieren / deaktivieren.

So stellen Sie die Zeit ein, zu der DND aktiviert wird :

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

So stellen Sie die Zeit ein, zu der DND deaktiviert wird :

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

HINWEIS: Ersetzen<start_time_in_minutes>und<end_time_in_minutes>durch den gewünschten Wert (siehe unten).


Beispiel:

Um DND so zu planen, dass es jeden Tag um 15:00 Uhr beginnt und um 18:30 Uhr endet, gehen Sie wie folgt vor:

Konvertieren Sie 15:00 und 18:30 in Minuten, um den Wert von <start_time_in_minutes>und zu erhalten <end_time_in_minutes>. Das heißt, multiplizieren Sie die Anzahl der Stunden mit 60 und addieren Sie die Anzahl der Minuten.

Für 15:00 wäre das: 15 * 60 + 0 = 900und für 18:30 wäre das : 18 * 60 + 30 = 1110. Geben Sie uns die folgenden Befehle:

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
Z0B
quelle
1

Aufbauend auf James 'Antwort möchte ich auch darauf hinweisen, dass Sie auch feststellen können, ob es ein- oder ausgeschaltet ist. Das Folgende schaltet es also aus und macht nichts, wenn es bereits ausgeschaltet ist:

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

Sie müssen Ihre eigene Computer-GUID in den Dateinamen einsetzen (es gibt nur eine Datei, daher ist es einfach herauszufinden).

Zsolt Szatmari
quelle