MacBook Pro 2010 под управлением OS X Lion.
Можно ли запускать сценарии для событий сна и пробуждения?
Мое конкретное приложение заключается в том, что у меня есть тома Truecrypt, синхронизированные с Dropbox, которые я регулярно использую как на своем MacBook, так и на iMac. Я редко закрываю свой MBP, так как закрытие крышки намного быстрее и проще, но это означает, что я должен не забыть размонтировать свои тома Truecrypt и позволить им синхронизироваться перед закрытием моего MBP. Это достаточно тривиально для их монтирования/демонтажа сценариями, но я хотел бы сделать еще один шаг и запустить эти сценарии автоматически.
Похоже, что при поставке ОС режим сна/пробуждения не может запускать сценарии , но были разработаны сторонние решения.
У меня нет личного опыта работы с этими программами или их поставщиками.
SleepWatcher может быть полезен.
Из описания: Его можно использовать для выполнения команды Unix, когда Mac или дисплей Mac переходит в спящий режим или просыпается, по истечении заданного времени без взаимодействия с пользователем или когда пользователь возобновляет деятельность после перерыва или при отключении питания. питание ноутбука Mac подключено или отсоединено. Он также может отправить Mac в спящий режим или получить время, прошедшее с момента последней активности пользователя.
У меня на 10.6.8 работает нормально. Доступны различные версии для поддержки версий от 10.1(!) до 10.7.
Это мое собственное приложение, так что учтите это, но ControlPlane может выполнять действия на основе режима сна/пробуждения. Вы найдете его на http://www.controlplaneapp.com/ .
ControlPlane — это форк MarcoPolo, который был обновлен для работы на Snow Leopard и Lion.
Я разработал следующий простой Launch Daemon, чтобы запустить триггер для сценариев на 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>
Вы можете заменить 'say w' своим кодом. Я пишу дату на z, но вы можете изменить это, чтобы написать что угодно. Для некоторых скриптов может потребоваться увеличить ExitTimeOut. Мой Launch Daemon находится в /Library/LaunchDaemons/wake-alert.plist
Демон запуска просматривает DirectoryService.server.log и записывает данные во временный файл, если он пуст. Файл очищается записью журнала «Сон» и завершением работы.
Если вы используете «быстрое переключение пользователей» для сна, вы обнаружите, что сценарии, требующие входа в систему, будут пытаться запускаться слишком рано и завершаться неудачно, если вы не измените Launch Daemon — возможно, grep «Succeeded» в «secure.log».
/Library/Logs/DirectoryService/DirectoryService.server.log
не существует в High Sierra (10.13).Ранее интересовался этим вопросом, но не нашел пошагового руководства о том, как его достичь. Решение основано на инструменте с открытым исходным кодом под названием sleepwatcher и Apple Launchd .
Так что наслаждайтесь! :
brew install sleepwatcher
~/.wakeup
и ~/.sleep
скрипты и поместите в него некоторую логику оболочкиchmod 700 ~/.sleep && chmod 700 ~/.wakeup
/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
- заснуть с запущенным терминалом/Library/LaunchAgents
sudo ln -sfv /usr/local/Cellar/sleepwatcher/2.2/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchAgents/
sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility.plist
Надеюсь, это поможет кому-нибудь :)
/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
зависает.brew install sleepwatcher
чтобы получить его. Спасибо!brew services start sleepwatcher; sudo cp /usr/local/Cellar/sleepwatcher/2.2.1/etc/sleepwatcher/rc.* /etc
а затем добавление ~/.sleep
файла.Я использую Keyboard Maestro ( https://www.keyboardmaestro.com/ ), никакой принадлежности. Он может запускать действие, когда система переходит в спящий режим или просыпается, среди множества других функций, облегчающих работу с Mac.
Я использовал события сна/пробуждения для запуска URL-адреса, который подключается к устройству IoT, которое я разработал для управления внешним вентилятором, который я поместил поверх Mac Mini (Mac перевернут).
Еще одна программа, которую вы можете обнаружить и испытать желание попробовать, — это EventScripts . Хотя это очень впечатляющая программа, которую я бы порекомендовал в целом, после ее тестирования для этой цели оказалось, что на самом деле она НЕ способна запускать сценарии достаточно быстро, чтобы они запускались до того, как ваш Mac перейдет в спящий режим, и вместо этого сценарий сна будет не запускаться до тех пор, пока Mac не проснется, что (очевидно) противоречит цели.
Я надеюсь избавить вас и всех, кто читает это, от часов тестирования, которые потребовались мне, чтобы прийти к такому выводу. Однако мне жаль говорить, что она потерпела неудачу, потому что во многих отношениях это действительно хорошо спроектированная, довольно мощная и гибкая программа. Это также довольно недорого (3 доллара). Однако низкоуровневой производительности просто не существует для запуска скрипта перед сном.
С другой стороны, в моих тестах (пока что) sleepwatcher оказался достаточно надежным и быстрым. Это также бесплатно, что здорово. Я продолжу тестирование, и если я обнаружу, что иногда это не работает, я обновлю свой ответ и продолжу тестировать другие варианты.
ОБНОВЛЕНИЕ . С момента написания этого ответа я не обнаружил, что sleepwatcher постоянно надежен, хотя изначально он казался работающим. В моем случае мне не нужно запускать произвольные сценарии, а просто извлекать внешние диски. Я нашел небольшое и недорогое приложение, которое делает это очень хорошо: Jettison . Это очень быстро стало одной из немногих утилит, без которых я не могу жить. Если ваши потребности такие же, как у меня, я думаю, вы найдете, что это стоит тех нескольких долларов, которые они берут.
WakeWatcher — это простое безликое фоновое приложение OS X, которое я создал для решения этой проблемы. Он запускается ~/.onwake
всякий раз, когда обнаруживается пробуждение. Затем вы можете поместить команды для монтирования/перемонтирования дисков в этот скрипт.
WakeWatcher подходит для использования в качестве элемента входа. Это не очень сложно, но бесплатно и просто.
Выполнение сценариев в спящем режиме было бы простым дополнением, но меня беспокоит время, доступное для завершения сценариев до того, как система действительно перейдет в спящий режим. Если вам это действительно нужно, откройте вопрос против проекта github, и я добавлю его.
ш-бета
благоухающий
мозговой луч