¿Cómo habilitar / deshabilitar No molestar desde el shell en Mavericks?

16

Me gustaría alternar No molestar en el centro de notificaciones con un atajo de teclado.

Estoy usando BetterTouchTool para algunos métodos abreviados de teclado adicionales, pero no admite habilitar / deshabilitar las notificaciones en las opciones predeterminadas.

Tiene una opción para ejecutar un comando de terminal, así que le pregunto aquí cómo habilitar / deshabilitar No molestar desde la terminal.

Encontré el programa 'No molestar' en OS X Mountain Lion With Automator e intenté ejecutar los comandos, pero no pareció funcionar.

Razvan
fuente
Dado que realmente está preguntando cómo hacerlo desde un teclado, en lugar de desde el shell, probablemente debería cambiar el título de la pregunta. O si me equivoco, ¡corrígeme!
webmarc
En realidad, no importa ... No me di cuenta de que "betterTouchTool" requiere el terminal para lo que quieres.
webmarc
Principalmente pregunté cómo hacerlo desde el shell. Hacerlo desde las preferencias del sistema resuelve mi caso, pero es más divertido saber cómo hacerlo desde shell.
Razvan
Gotcha, actualicé mi respuesta con la información del shell.
webmarc

Respuestas:

13

Puedes configurar un atajo de teclado global para él en Preferencias del sistema -> Teclado -> Atajos -> Control de misión

O si definitivamente lo desea desde la línea de comandos, un script de manzana para hacerlo (suponiendo que configure el atajo de teclado para usar cmdshiftoptctrlD.

Tenga en cuenta que DEBE configurar un comando de teclado en Preferencias del sistema para que esto funcione.

Ponga el siguiente script en un archivo, por ejemplo, ~ / dnd.applescript

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

Ahora puede ejecutar osascript ~/dnd.applescriptdesde la línea de comandos para alternar su configuración de DND.

Tapa de la pantalla: Modificación de atajos de teclado en Preferencias del Sistema

webmarc
fuente
1
¡Perfecto! Gracias. Ojalá hubiera una mejor manera.
Will B
¿Mejor de qué manera?
webmarc
1
No tener que vincular un atajo de teclado oscuro y alternar con eso osascript.
Will B
Supongo que te estoy preguntando si te refieres a mejor como "más efectivo" o mejor como "más bonito debajo de las sábanas". ¿Es un deseo práctico o estético?
webmarc
Solo por curiosidad, no tengo ninguna sugerencia adicional de ninguna manera.
webmarc
17

A partir de OS X 10.10.3, este AppleScript activará "No molestar". No se requiere atajo de teclado:

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

Puede guardarlo como AppleScript y ejecutarlo desde la terminal con osascript DoNotDisturb.applescript, o puede incluirlo en un script Bash envolviéndolo en un heredoc de esta manera:

#!/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
fuente
66
Esto significa que también puede alternar DoNotDisturbhaciendo clic en los mosaicos de la derecha en la barra de menú mientras mantiene presionada la Optiontecla.
Razvan
2
Esto ya no funciona en Mojave. Applescript parece hacer clic en el elemento de la barra de menú como si la opción no estuviera
desactivada
13

Puede simplificar la respuesta que proporcionó razvanz utilizando el -currentHostargumento del comando predeterminado.

Habilitar No molestar:

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

(a través de https://heyfocus.com/blog/enabling-do-not-disturb-mode/ )

Desactivar No molestar:

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

Ahora podría concluir esto fácilmente como un script para habilitar o deshabilitar "No molestar" como un script que funcionaría en la máquina de cualquier persona, independientemente de las preferencias del sistema. Aquí hay un ejemplo de cómo hacerlo:

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

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

Ryan
fuente
2
¡Error visual menor! [Nota para las personas que miran @ color]: Probé esto y funciona. Pospuse algunas notificaciones durante 5 minutos, y luego activé No molestar para notificaciones, y luego ejecuté los comandos en "Desactivar No molestar". Por un lado, el ícono permaneció atenuado, pero por el otro, parecía funcionar de otra manera: las notificaciones aparecieron en unos minutos. Segunda prueba: activé No molestar para notificaciones (sin posponer nada) y ejecuté los comandos en "Desactivar no molestar". El ícono permaneció atenuado, pero aparecieron notificaciones.
Matthew Elvey
1
@MatthewElvey Eso podría ser un cambio de Sierra a High Sierra. Probablemente necesitemos encontrar una nueva forma de volver a cargar el icono de la barra de menú.
Ryan
1
+1 para el comando que no es Applescript!
Matt
1
Dnd no parece haber cambiado en alta sierra / mojave con esta solución
Dylanthepiguy
8

Sobre la base de las respuestas de James y Zsolt, he creado un par de scripts para activar o desactivar (no alternar) el estado DND. Tampoco requieren ninguna combinación de teclas ni GUID de la máquina para funcionar.

IMPORTANTE : Tenga en cuenta que ejecutar estos scripts por primera vez puede requerir permiso de accesibilidad para la aplicación que ejecuta los scripts. Si no otorga el permiso en la solicitud, el botón alt/ optionpermanecerá presionado para el sistema y deberá cerrar la sesión y volver a iniciarla para "desactivarla". Esto también es cierto para respuestas anteriores con AppleScript. Si se edita el script, los permisos deberán ser revocados y vueltos a otorgar. Los permisos se otorgan usando:

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

Para macOS Sierra y High Sierra es menu bar 1:

Girar No molestar EN (desactivar las notificaciones):

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

Girar No molestar OFF (activar las notificaciones):

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

Para versiones anteriores de macOS es menu bar 2:

Girar No molestar EN (desactivar las notificaciones):

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

Girar No molestar OFF (activar las notificaciones):

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
fuente
1
Esto ya no funciona en Mojave. Applescript parece hacer clic en el elemento de la barra de menú como si la opción no estuviera
desactivada
2

Horario No molestar

Solo para agregar que también puede programar No molestar desde la línea de comandos para activar / desactivar cada día a las horas establecidas.

Para configurar la hora en que se habilitará DND :

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

Para configurar la hora en que se deshabilitará DND :

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

NOTA: reemplace<start_time_in_minutes>y<end_time_in_minutes>con el valor deseado (explicado a continuación).


Ejemplo:

Para programar DND para comenzar cada día a las 15:00 y finalizar a las 18:30 haga lo siguiente:

Convierta 15:00 y 18:30 a minutos para obtener el valor de <start_time_in_minutes>y <end_time_in_minutes>. Es decir, multiplique la cantidad de horas por 60 y agregue la cantidad de minutos.

Por eso sería 15:00: 15 * 60 + 0 = 900y por eso sería 18:30: 18 * 60 + 30 = 1110. Dándonos los siguientes comandos:

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
fuente
1

Sobre la base de la respuesta de James, también quisiera señalar que también puedes determinar si está activado o desactivado. Entonces lo siguiente lo apaga y no hace nada si ya está apagado:

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

Debe sustituir su propio GUID de máquina en el nombre de archivo (solo hay un archivo allí, por lo que es fácil de entender)

Zsolt Szatmari
fuente