Comment activer / désactiver Ne pas déranger du shell sur Mavericks?

16

Je voudrais basculer le Ne pas déranger dans le centre de notification avec un raccourci clavier.

J'utilise BetterTouchTool pour certains raccourcis clavier supplémentaires, mais il ne prend pas en charge l'activation / désactivation des notifications dans les options par défaut.

Il a une option pour exécuter une commande de terminal, donc je demande ici comment activer / désactiver Ne pas déranger du terminal?

J'ai trouvé l' annexe «Ne pas déranger» dans OS X Mountain Lion avec Automator et j'ai essayé d'exécuter les commandes, mais cela ne semblait pas fonctionner.

Razvan
la source
Étant donné que vous vous demandez vraiment comment le faire à partir d'un clavier, par opposition au shell, vous devriez probablement changer le titre de la question. Ou si je me trompe, corrigez-moi!
webmarc
En fait, tant pis ... Je ne savais pas que "betterTouchTool" nécessite le terminal pour ce que vous voulez.
webmarc
J'ai principalement demandé comment le faire depuis le shell. Le faire à partir des préférences système résout mon cas, mais c'est plus amusant de savoir comment le faire à partir du shell.
Razvan
Gotcha, j'ai mis à jour ma réponse avec les informations sur le shell.
webmarc

Réponses:

13

Vous pouvez simplement configurer un raccourci clavier global pour cela dans les Préférences Système -> Clavier -> Raccourcis -> Mission Control

Ou si vous le souhaitez définitivement à partir de la ligne de commande, un script Apple pour ce faire (en supposant que vous avez configuré le raccourci clavier à utiliser cmdshiftoptctrlD.

Notez que vous DEVEZ toujours configurer une commande de clavier dans les Préférences Système pour que cela fonctionne.

Mettez le script ci-dessous dans un fichier, par exemple, ~ / dnd.applescript

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

Vous pouvez maintenant exécuter à osascript ~/dnd.applescriptpartir de la ligne de commande pour basculer votre paramètre NPD.

Capture d'écran: Modification du raccourci clavier dans les Préférences Système

webmarc
la source
1
Parfait! Merci. J'aurais aimé qu'il y ait une meilleure façon.
Will B
Mieux de quelle manière?
webmarc
1
Ne pas avoir à lier un raccourci clavier obscur et à le basculer avec osascript.
Will B
Je suppose que je vous demande si vous voulez dire mieux comme «plus efficace» ou mieux que «plus joli sous les couvertures». Est-ce un souhait pratique ou esthétique?
webmarc
Juste curieux, je n'ai aucune suggestion supplémentaire de toute façon.
webmarc
17

À partir d'OS X 10.10.3, cet AppleScript basculera «Ne pas déranger». Aucun raccourci clavier requis:

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

Vous pouvez l'enregistrer en tant que AppleScript et l'exécuter à partir du terminal avec osascript DoNotDisturb.applescript, ou vous pouvez l'inclure dans un script Bash en l'enveloppant dans un hérédoc comme ceci:

#!/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
la source
6
Cela signifie que vous pouvez également basculer DoNotDisturben cliquant sur les tuiles les plus à droite dans la barre de menu tout en maintenant la Optiontouche.
Razvan
2
Cela ne fonctionne plus sur Mojave. Applescript semble cliquer sur l'élément de la barre de menu comme si l'option n'était pas désactivée, même si c'est le cas
Dylanthepiguy
13

Vous pouvez simplifier la réponse fournie par razvanz en utilisant l' -currentHostargument de la commande par défaut.

Activez Ne pas déranger:

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

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

Désactivez Ne pas déranger:

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

Maintenant, vous pouvez facilement envelopper cela sous forme de script pour activer ou désactiver "Ne pas déranger" en tant que script qui fonctionnerait sur la machine de n'importe qui, quelles que soient les préférences du système. Voici un exemple de la façon de procéder:

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

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

Ryan
la source
2
Bug visuel mineur! [Noté pour les gens qui regardent @ color]: J'ai essayé cela et ça fonctionne en quelque sorte. J'ai suspendu certaines notifications pendant 5 minutes, puis activé Ne pas déranger pour les notifications, puis exécuté les commandes sous "Désactiver Ne pas déranger". D'une part, l'icône est restée grisée, mais d'autre part, elle a semblé fonctionner autrement - des notifications sont apparues en quelques minutes. Deuxième test: j'ai activé Ne pas déranger pour les notifications (sans rien répéter) et j'ai exécuté les commandes sous "Désactiver Ne pas déranger". L'icône est restée grisée, mais les notifications sont apparues.
Matthew Elvey
1
@MatthewElvey Cela pourrait être un changement de Sierra à High Sierra. Nous devons probablement trouver une nouvelle façon de recharger l'icône de la barre de menus.
Ryan
1
+1 pour la commande non-Applescript!
Matt
1
Dnd ne semble pas avoir changé en haute sierra / mojave avec cette solution
Dylanthepiguy
8

En m'appuyant sur les réponses de James et Zsolt, j'ai créé quelques scripts pour activer ou désactiver (pas basculer) l'état du MDN. Ils ne nécessitent pas non plus de raccourcis clavier ou de GUID de machine pour fonctionner.

IMPORTANT : veuillez noter que l'exécution de ces scripts pour la première fois peut nécessiter une autorisation d'accessibilité pour l'application qui exécute les scripts. Si vous n'accordez pas l'autorisation dans la demande, le bouton alt/ optionrestera enfoncé pour le système et vous devrez vous déconnecter et vous reconnecter pour le "désactiver". Cela est également vrai pour les réponses précédentes avec AppleScript. Si le script est modifié, les autorisations devront être révoquées et ré-accordées. Les autorisations sont accordées en utilisant:

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

Pour macOS Sierra et High Sierra, c'est menu bar 1:

Tournez Ne pas déranger ON (désactiver les notifications):

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

Tournez Ne pas déranger OFF (activer les notifications):

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

Pour les versions antérieures de macOS, c'est menu bar 2:

Tournez Ne pas déranger ON (désactiver les notifications):

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

Tournez Ne pas déranger OFF (activer les notifications):

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
la source
1
Cela ne fonctionne plus sur Mojave. Applescript semble cliquer sur l'élément de la barre de menu comme si l'option n'était pas désactivée, même si c'est le cas
Dylanthepiguy
2

Horaire Ne pas déranger

Juste pour ajouter que vous pouvez également planifier Ne pas déranger à partir de la ligne de commande pour activer / désactiver chaque jour à des heures définies.

Pour définir l'heure à laquelle le MDN sera activé :

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

Pour définir l'heure à laquelle le NPD sera désactivé :

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

REMARQUE: remplacez<start_time_in_minutes>et<end_time_in_minutes>par la valeur souhaitée (expliquée ci-dessous).


Exemple:

Pour planifier que le MDN commence chaque jour à 15 h et se termine à 18 h 30, procédez comme suit:

Convertissez 15:00 et 18:30 en minutes pour obtenir la valeur de <start_time_in_minutes>et <end_time_in_minutes>. Autrement dit, multipliez le nombre d'heures par 60 et ajoutez le nombre de minutes.

Pour 15h00 ce serait: 15 * 60 + 0 = 900et 18:30 ce serait: 18 * 60 + 30 = 1110. Donnez-nous les commandes ci-dessous:

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
la source
1

S'appuyant sur la réponse de James, je voudrais également souligner que vous pouvez également déterminer si elle est activée ou désactivée. Ainsi, ce qui suit le désactive et ne fait rien s'il est déjà désactivé:

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

Vous devez remplacer votre propre GUID de machine dans le nom de fichier (il n'y a qu'un seul fichier, il est donc facile de comprendre)

Zsolt Szatmari
la source