Como ativar / desativar o Não perturbe do shell no Mavericks?

16

Gostaria de alternar o botão Não perturbe no centro de notificação com um atalho de teclado.

Estou usando o BetterTouchTool para alguns atalhos de teclado extras, mas ele não suporta a ativação / desativação das notificações nas opções padrão.

Ele tem uma opção para executar um comando do terminal, então estou perguntando aqui como ativar / desativar o Não perturbe no terminal?

Encontrei a Agenda 'Não Perturbe' no OS X Mountain Lion With Automator e tentei executar os comandos, mas não pareceu funcionar.

Razvan
fonte
Como você realmente está perguntando sobre como fazê-lo a partir de um teclado, em vez de no shell, provavelmente deve alterar o título da pergunta. Ou se eu estiver errado, por favor me corrija!
Webmarc
Na verdade, não importa ... eu não percebi que o "betterTouchTool" requer o terminal para o que você deseja.
Webmarc
Eu perguntei principalmente como fazê-lo a partir do shell. Fazer isso a partir das preferências do sistema resolve meu caso, mas é mais divertido saber como fazer isso a partir do shell.
Razvan
Entendi, atualizei minha resposta com as informações do shell.
Webmarc

Respostas:

13

Você pode simplesmente configurar um atalho de teclado global para ele em Preferências do Sistema -> Teclado -> Atalhos -> Controle da Missão

Ou, se você definitivamente quiser, na linha de comando, um AppleScript para fazer isso (supondo que você configure o atalho do teclado para usar cmdshiftoptctrlD.

Observe que você DEVE ainda configurar um comando de teclado nas Preferências do Sistema para que isso funcione.

Coloque o script abaixo em um arquivo, digamos, ~ / dnd.applescript

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

Agora você pode executar a osascript ~/dnd.applescriptpartir da linha de comando para alternar sua configuração de DND.

Captura de tela: Modificação de atalho do teclado nas Preferências do Sistema

webmarc
fonte
1
Perfeito! Obrigado. Gostaria que houvesse uma maneira melhor embora.
Will B
Melhor de que maneira?
Webdec
1
Não é necessário vincular um atalho de teclado obscuro e alterná-lo com osascript.
Will B
Acho que estou perguntando se você quer dizer melhor em "mais eficaz" ou melhor em "mais bonito debaixo das cobertas". É um desejo prático ou estético?
Web
Apenas curioso, não tenho sugestões adicionais de qualquer maneira.
Webdec
17

No OS X 10.10.3, este AppleScript alterna "Não perturbe". Não é necessário nenhum atalho 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

Você pode salvá-lo como um AppleScript e executá-lo a partir do terminal com osascript DoNotDisturb.applescript, ou pode incluí-lo em um script Bash envolvendo-o em um heredoc como:

#!/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
fonte
6
Isso significa que você também pode alternar DoNotDisturbclicando nos ladrilhos mais à direita na barra de menus enquanto mantém pressionada a Optiontecla.
Razvan
2
Isso não funciona mais no Mojave. Applescript parece clique no item barra de menu como se opção não estava para baixo, mesmo que seja
Dylanthepiguy
13

Você pode simplificar a resposta fornecida pelo razvanz usando o -currentHostargumento para o comando padrão.

Ativar Não perturbe:

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/ )

Desativar Não perturbe:

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

Agora você pode facilmente agrupar isso como um script para ativar ou desativar "Não perturbe" como um script que funcionaria na máquina de qualquer pessoa, independentemente das preferências do sistema. Aqui está um exemplo de como fazer isso:

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

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

Ryan
fonte
2
Bug visual menor! [Notável para pessoas que parecem @ color]: Eu tentei isso e meio que funciona. Suspirei algumas notificações por 5 minutos, ative Não perturbe para notificações e executei os comandos em "Desativar não perturbe". Por um lado, o ícone permaneceu acinzentado, mas, por outro, parecia funcionar de outra maneira - as notificações apareceram em alguns minutos. Segundo teste: ativei Não perturbe para notificações (sem adiar nada) e executei os comandos em "Desativar não perturbe". O ícone permaneceu acinzentado, mas as notificações apareceram imediatamente.
Matthew Elvey 23/02
1
@MatthewElvey Isso pode ser uma mudança de Sierra para High Sierra. Provavelmente, precisamos encontrar uma nova maneira de recarregar o ícone da barra de menus.
Ryan
1
+1 para comando não-Applescript!
Matt
1
Dnd does not parecem ser alterado em alta serra / mojave com esta solução
Dylanthepiguy
8

Com base nas respostas de James e Zsolt, criei alguns scripts para ativar ou desativar (não alternar) o estado DND. Eles também não exigem nenhuma ligação de chave ou GUID da máquina para funcionar.

IMPORTANTE : observe que a execução desses scripts pela primeira vez pode exigir permissão de acessibilidade para o aplicativo que executa os scripts. Se você não conceder a permissão na solicitação, o botão alt/ optionpermanecerá pressionado para o sistema e você precisará fazer logout e logon novamente para "descompactá-lo". Isso também se aplica a respostas anteriores com AppleScript. Se o script for editado, as permissões precisarão ser revogadas e concedidas novamente. As permissões são concedidas usando:

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

Para o macOS Sierra e High Sierra, é menu bar 1:

Vire Do Not Disturb ON (desativar as notificações):

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

Vire Do Not Disturb OFF (ativar as notificações):

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 versões anteriores do macOS, é menu bar 2:

Vire Do Not Disturb ON (desativar as notificações):

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

Vire Do Not Disturb OFF (ativar as notificações):

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
fonte
1
Isso não funciona mais no Mojave. Applescript parece clique no item barra de menu como se opção não estava para baixo, mesmo que seja
Dylanthepiguy
2

Agendar Não Perturbe

Apenas para adicionar que você também pode agendar Não perturbe na linha de comando para ativar / desativar todos os dias em horários definidos.

Para definir a hora em que o DND será ativado :

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

Para definir a hora em que o DND será desativado :

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

NOTA: substitua<start_time_in_minutes>e<end_time_in_minutes>pelo valor desejado (explicado abaixo).


Exemplo:

Para agendar o DND para iniciar todos os dias às 15:00 e terminar às 18:30, faça o seguinte:

Converta 15:00 e 18:30 em minutos para obter o valor de <start_time_in_minutes>e <end_time_in_minutes>. Ou seja, multiplique o número de horas por 60 e adicione o número de minutos.

Para 15:00 que seria: 15 * 60 + 0 = 900e para 18:30 que seria: 18 * 60 + 30 = 1110. Nos dando os comandos abaixo:

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

Com base na resposta de James, também gostaria de salientar que você também pode determinar se está ativado ou desativado. Portanto, o seguinte é desativado e não faz nada se já estiver desativado:

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

Você deve substituir o seu próprio GUID da máquina pelo nome do arquivo (existe apenas um arquivo, por isso é fácil descobrir)

Zsolt Szatmari
fonte