Jak włączyć / wyłączyć opcję Nie przeszkadzać w powłoce w Mavericks?

16

Chciałbym przełączać opcję Nie przeszkadzać w centrum powiadomień za pomocą skrótu klawiaturowego.

Używam BetterTouchTool do niektórych dodatkowych skrótów klawiaturowych, ale nie obsługuje włączania / wyłączania powiadomień w opcjach domyślnych.

Ma opcję wykonania polecenia terminalu, więc pytam tutaj, jak włączyć / wyłączyć opcję Nie przeszkadzać w terminalu?

Znalazłem harmonogram „Nie przeszkadzać” w systemie OS X Mountain Lion With Automator i próbowałem uruchomić polecenia, ale nie działało.

Razvan
źródło
Ponieważ naprawdę pytasz, jak to zrobić z klawiatury, a nie z powłoki, prawdopodobnie powinieneś zmienić tytuł pytania. Lub jeśli się mylę, popraw mnie!
webmarc
Właściwie nieważne ... Nie zdawałem sobie sprawy, że „betterTouchTool” wymaga terminala do tego, czego chcesz.
webmarc
Zapytałem przede wszystkim, jak to zrobić z powłoki. Robienie tego z preferencji systemowych rozwiązuje mój przypadek, ale fajniej jest wiedzieć, jak to zrobić z powłoki.
Razvan
Gotcha, zaktualizowałem swoją odpowiedź o informacje o powłoce.
webmarc

Odpowiedzi:

13

Możesz po prostu ustawić dla niego globalny skrót klawiaturowy w Preferencjach systemowych -> Klawiatura -> Skróty -> Kontrola misji

Lub jeśli na pewno chcesz to z wiersza poleceń, użyj do tego skryptu jabłkowego (zakładając, że skonfigurowałeś skrót klawiszowy do użycia cmdshiftoptctrlD.

Pamiętaj, że nadal musisz ustawić polecenie klawiatury w Preferencjach systemowych, aby to zadziałało.

Umieść poniższy skrypt w pliku, powiedzmy ~ / dnd.applescript

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

Teraz możesz uruchomić osascript ~/dnd.applescriptz wiersza poleceń, aby przełączyć ustawienia DND.

Screencap: Modyfikacja skrótu klawiaturowego w Preferencjach systemowych

webmarc
źródło
1
Doskonały! Dzięki. Chciałbym, żeby był lepszy sposób.
Czy B
Lepiej w jaki sposób?
webmarc,
1
Nie trzeba wiązać niejasnego skrótu klawiaturowego i przełączać go za pomocą osascript.
Czy B,
Chyba pytam, czy masz na myśli lepiej, jak w „bardziej skutecznym”, czy lepiej jak w „ładniejszej pod przykryciem”. Czy jest to praktyczne czy estetyczne życzenie?
webmarc,
Ciekawe, nie mam żadnych dodatkowych sugestii.
webmarc,
17

Począwszy od OS X 10.10.3, ten skrypt AppleScript będzie przełączać „Nie przeszkadzać”. Nie wymaga skrótu klawiaturowego:

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

Możesz zapisać go jako AppleScript i uruchomić z terminala osascript DoNotDisturb.applescript, lub możesz dołączyć go do skryptu Bash, zawijając go w heredoc w taki sposób:

#!/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
źródło
6
Oznacza to, że możesz również przełączać DoNotDisturb, klikając kafelki znajdujące się po prawej stronie paska menu, przytrzymując Optionklawisz.
Razvan
2
To już nie działa w Mojave. Wygląda na to, że Applescript klika element paska menu, jakby opcja nie była wyłączona, mimo że jest
Dylanthepiguy
13

Możesz uprościć odpowiedź udzieloną przez razvanz , używając -currentHostargumentu polecenia defaults.

Włącz nie przeszkadzać:

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

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

Wyłącz nie przeszkadzać:

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

Teraz możesz łatwo zawinąć to w skrypt, aby włączyć lub wyłączyć „Nie przeszkadzać” jako skrypt, który działałby na dowolnym komputerze, niezależnie od preferencji systemowych. Oto przykład, jak to zrobić:

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

Źródło: https://gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9

Ryan
źródło
2
Drobny błąd wizualny! [Uwaga dla osób, które wyglądają @ kolor]: Próbowałem tego i to działa. Odłożyłem niektóre powiadomienia na 5 minut, a następnie włączyłem opcję Nie przeszkadzać dla powiadomień, a następnie uruchomiłem polecenia w sekcji „Wyłącz nie przeszkadzać”. Z jednej strony ikona pozostała wyszarzona, ale z drugiej strony działała inaczej - powiadomienia pojawiły się po kilku minutach. Drugi test: włączyłem opcję Nie przeszkadzać dla powiadomień (bez odkładania czegokolwiek) i uruchomiłem polecenia w sekcji „Wyłącz nie przeszkadzać”. Ikona pozostała wyszarzona, ale pojawiły się powiadomienia.
Matthew Elvey
1
@MatthewElvey To może być zmiana z Sierra na High Sierra. Prawdopodobnie musimy znaleźć nowy sposób na ponowne załadowanie ikony paska menu.
Ryan
1
+1 za polecenie inne niż Applescript!
Matt
1
Dnd nie wydaje się być zmieniony na wysokiej sierra / mojave z tym rozwiązaniem
Dylanthepiguy
8

Opierając się na odpowiedziach Jamesa i Zsolta, stworzyłem kilka skryptów do włączania i wyłączania (nie przełączania) stanu DND. Nie wymagają również żadnych powiązań klawiszy ani identyfikatora GUID komputera do działania.

WAŻNE : Należy pamiętać, że uruchomienie tych skryptów po raz pierwszy może wymagać pozwolenia na dostęp do aplikacji, która je uruchamia. Jeśli nie udzielisz pozwolenia w żądaniu, przycisk alt/ optionpozostanie wciśnięty dla systemu i będziesz musiał się wylogować i zalogować ponownie, aby go „cofnąć”. Dotyczy to również poprzednich odpowiedzi z AppleScript. Jeśli skrypt jest edytowany, uprawnienia będą musiały zostać odwołane i ponownie przyznane. Uprawnienia są przyznawane przy użyciu:

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

W systemach macOS Sierra i High Sierra jest to menu bar 1:

Skręć nie przeszkadzać ON (wyłączenie powiadomień):

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

Skręć nie przeszkadzać OFF (włączyć powiadomienia):

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

W przypadku starszych wersji systemu macOS jest to menu bar 2:

Skręć nie przeszkadzać ON (wyłączenie powiadomień):

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

Skręć nie przeszkadzać OFF (włączyć powiadomienia):

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
źródło
1
To już nie działa w Mojave. Wygląda na to, że Applescript klika element paska menu, jakby opcja nie była wyłączona, nawet jeśli jest
Dylanthepiguy
2

Zaplanuj Nie przeszkadzać

Wystarczy dodać, że możesz również zaplanować opcję Nie przeszkadzać z wiersza poleceń, aby aktywować / dezaktywować każdy dzień o określonych porach.

Aby ustawić czas, kiedy będzie DND włączone :

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

Aby ustawić czas, gdy DND będą wyłączone :

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

UWAGA: zastąpienie<start_time_in_minutes>i<end_time_in_minutes>z pożądanej wartości (jak opisano poniżej).


Przykład:

Aby zaplanować uruchamianie DND każdego dnia o 15:00 i kończenie o 18:30, wykonaj następujące czynności:

Konwertuj 15:00 i 18:30 na minuty, aby uzyskać wartość <start_time_in_minutes>i <end_time_in_minutes>. Oznacza to, pomnożyć liczbę godzin przez 60 i dodać liczbę minut.

Do 15:00, które byłoby: 15 * 60 + 0 = 900a na 18:30, że będzie: 18 * 60 + 30 = 1110. Dając nam poniższe polecenia:

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
źródło
1

Opierając się na odpowiedzi Jamesa, chciałbym również zauważyć, że możesz również określić, czy jest on włączony, czy wyłączony. Tak więc następujące wyłącza go i nic nie robi, jeśli jest już wyłączone:

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

Musisz podać własny identyfikator GUID komputera w nazwę pliku (jest tam tylko jeden plik, więc łatwo go rozgryźć)

Zsolt Szatmari
źródło