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.


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


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

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


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

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

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źć)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.