Possível executar scripts em suspensão e ativação?

48

MacBook Pro 2010 executando o OS X Lion.

É possível executar scripts em eventos de suspensão e ativação?

Meu aplicativo específico é que eu tenho volumes Truecrypt sincronizados com o Dropbox que uso regularmente no meu MacBook e no iMac. Eu raramente desligo meu MBP, pois fechar a tampa é muito mais rápido e fácil, mas isso significa que tenho que lembrar de desmontar meus volumes do Truecrypt e deixá-los sincronizar novamente antes de fechar o MBP. É trivial o suficiente para montar / desmontar scripts, mas eu gostaria de dar um passo adiante e fazer com que esses scripts sejam executados automaticamente.

sh-beta
fonte

Respostas:

17

Parece que, à medida que o sistema operacional é enviado, a suspensão / ativação não pode disparar scripts , mas foram desenvolvidas soluções de terceiros.

Não tenho experiência pessoal com esses programas ou seus fornecedores.

Daniel
fonte
2
O cenário parece fazer o que estou procurando. Obrigado!
sh-beta
Eu tinha o cenário que disparava o maçom que dispara um script bash e voilá.
redolent
Para encerrar um aplicativo basta digitar isso em uma nova janela AppleScrip e guardá-lo nos SleepScripts pasta: aplicação tell "codebox" quit tell final
brainray
24

O SleepWatcher pode ser útil.

Da descrição: Ele pode ser usado para executar um comando Unix quando o Mac ou a tela do Mac entra no modo de suspensão ou acorda, após um determinado período sem interação do usuário ou quando o usuário retoma a atividade após um intervalo ou quando a energia o suprimento de um notebook Mac está conectado ou desconectado. Também pode enviar o Mac para o modo de suspensão ou recuperar o tempo desde a última atividade do usuário.

Está funcionando bem para mim no 10.6.8. Várias versões estão disponíveis para suportar 10.1 (!) A 10.7

DaveEmme
fonte
Aqui estão algumas dicas do Mac OSX que usam o SleepWatcher.
Novinhas
4
Você pode instalar o SleepWatcher da Homebrew , por exemplo brew install sleepwatcher. E veja este post , é muito útil. O utilitário SleepWatcher também suporta o OS X El Capitan (10.11).
Rockallite
11

Este é meu próprio aplicativo, portanto, considere isso, mas o ControlPlane tem a capacidade de executar ações com base no modo de suspensão / ativação. Você o encontrará em http://www.controlplaneapp.com/ .

O ControlPlane é um fork do MarcoPolo e foi atualizado para rodar no Snow Leopard e Lion.

Dustin
fonte
1
Utilitário de som muito legal, seu exagero por isso, mas se você precisar acionar mais do que acordar / dormir, isso parecerá muito legal. Também gosto do suporte do Growl para que você saiba o que está fazendo. E é grátis :).
Studgeek
2
Deve ser a resposta aceite porque a sua graça
Kevin Parker
isso pode ser usado para montar e desmontar unidades com suspensão e ativação? precisamos escrever scripts de automação?
bicepjai
1
anos depois, o avião de controle agora não é mantido devido ao acúmulo de incompatibilidades que Dustin postou em seu blog que não teve tempo de corrigir. Que pena, faz sentido.
lahwran
6

Desenvolvi o seguinte simples Daemon de Inicialização para fornecer um gatilho 'wake' para scripts no Leopard:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>wake-alert</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>z=/tmp/wake; test -s $z || { date > $z; say w; }; 
tail -1 /Library/Logs/DirectoryService/DirectoryService.server.log | grep -v Sleep || > $z
        </string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Logs/DirectoryService/DirectoryService.server.log</string>
    </array>
    <key>ExitTimeOut</key>
    <integer>2</integer>
    <key>ThrottleInterval</key>
    <integer>1</integer>
</dict>
</plist>

Você pode substituir 'say w' pelo seu código. Escrevo uma data para z, mas você pode alterar isso para escrever qualquer coisa. Pode ser necessário aumentar 'ExitTimeOut' para alguns scripts. Meu Daemon de inicialização reside em /Library/LaunchDaemons/wake-alert.plist

O Daemon de Inicialização observa DirectoryService.server.log e grava em um arquivo temporário, desde que o arquivo esteja vazio. O arquivo é limpo por uma entrada de log 'Sleep' e por Shut Down.

Se você usar 'troca rápida de usuário' para suspensão, verá que os scripts que requerem um usuário conectado tentarão executar muito cedo e falharão, a menos que você modifique o Daemon de Inicialização - talvez grep 'Succeeded' em 'secure.log'.

Neville Hillyer
fonte
1
/Library/Logs/DirectoryService/DirectoryService.server.lognão existe em High Sierra (10.13).
Nowaker
Provavelmente existem outros logs que podem ser usados.
Neville Hillyer
2

Outro programa que você pode descobrir e ficar tentado a experimentar é o EventScripts . Embora seja um programa muito impressionante que eu recomendaria em geral, depois de testá-lo para esse fim, ele NÃO parece realmente capaz de disparar scripts com rapidez suficiente para serem executados antes que o Mac entre no modo de suspensão. não será executado até que o Mac acorde, o que (obviamente) derrota o objetivo.

Espero salvar você e qualquer outra pessoa lendo isso nas horas de teste que levei para chegar a essa conclusão. Lamento dizer que falhou, no entanto, porque, em muitos aspectos, é um programa realmente bem projetado, poderoso e flexível. Também é bastante barato (US $ 3). O desempenho de baixo nível simplesmente não parece estar lá, no entanto, para executar um script antes de dormir.

Por outro lado, nos meus testes (até agora) o sleepwatcher parece bastante confiável e rápido. Também é gratuito, o que é incrível. Continuarei testando e, se achar que não funciona às vezes, atualizarei minha resposta e continuarei testando outras opções.

ATUALIZAÇÃO Eu não encontrou sleepwatcher a ser consistentemente confiável, uma vez escrevendo originalmente esta resposta, embora inicialmente parecia estar funcionando. No meu caso, não preciso executar scripts arbitrários, mas apenas ejetar unidades externas. Encontrei um aplicativo pequeno e barato que faz isso muito bem até agora: Jettison . Isso rapidamente se tornou um dos poucos utilitários sem os quais não posso viver. Se suas necessidades são as mesmas que as minhas, acho que você achará que vale a pena os poucos dólares que eles cobram.

iconoclasta
fonte
1

O WakeWatcher é um aplicativo simples de plano de fundo sem rosto do OS X que eu criei para resolver esse problema. É executado ~/.onwakesempre que a ativação é detectada. Em seguida, você pode colocar os comandos para montar / remontar suas unidades nesse script.

WakeWatcher é adequado para uso como um item de login. Não é muito sofisticado, mas é gratuito e simples.

Executar scripts em suspensão seria uma adição simples, mas estou preocupado com o tempo disponível para a conclusão dos scripts antes que o sistema realmente entre em suspensão. Se você realmente precisar, abra um problema no projeto github e eu o adicionarei.

Eric
fonte