Можно ли запускать сценарии во время сна и пробуждения?

MacBook Pro 2010 под управлением OS X Lion.

Можно ли запускать сценарии для событий сна и пробуждения?

Мое конкретное приложение заключается в том, что у меня есть тома Truecrypt, синхронизированные с Dropbox, которые я регулярно использую как на своем MacBook, так и на iMac. Я редко закрываю свой MBP, так как закрытие крышки намного быстрее и проще, но это означает, что я должен не забыть размонтировать свои тома Truecrypt и позволить им синхронизироваться перед закрытием моего MBP. Это достаточно тривиально для их монтирования/демонтажа сценариями, но я хотел бы сделать еще один шаг и запустить эти сценарии автоматически.

Ответы (8)

Похоже, что при поставке ОС режим сна/пробуждения не может запускать сценарии , но были разработаны сторонние решения.

У меня нет личного опыта работы с этими программами или их поставщиками.

Сценарий, кажется, делает то, что я ищу. Спасибо!
У меня был Сценарий, запускающий applescript, который запускает сценарий bash, и вуаля.
Чтобы завершить приложение, просто введите это в новом окне AppleScrip и сохраните его в папке SleepScripts:

SleepWatcher может быть полезен.

Из описания: Его можно использовать для выполнения команды Unix, когда Mac или дисплей Mac переходит в спящий режим или просыпается, по истечении заданного времени без взаимодействия с пользователем или когда пользователь возобновляет деятельность после перерыва или при отключении питания. питание ноутбука Mac подключено или отсоединено. Он также может отправить Mac в спящий режим или получить время, прошедшее с момента последней активности пользователя.

У меня на 10.6.8 работает нормально. Доступны различные версии для поддержки версий от 10.1(!) до 10.7.

Вот несколько подсказок для Mac OSX , которые используют SleepWatcher.
Вы можете установить SleepWatcher с помощью Homebrew , например brew install sleepwatcher. И посмотрите этот пост , он очень полезен. Утилита SleepWatcher также поддерживает OS X El Capitan (10.11).

Это мое собственное приложение, так что учтите это, но ControlPlane может выполнять действия на основе режима сна/пробуждения. Вы найдете его на http://www.controlplaneapp.com/ .

ControlPlane — это форк MarcoPolo, который был обновлен для работы на Snow Leopard и Lion.

Очень классно звучащая утилита, ее излишество только для этого, но если вам нужно запускать больше, чем пробуждение / сон, то это звучит довольно круто. Мне также нравится поддержка Growl, так что вы знаете, что она делает. И это бесплатно :).
Должен быть принятый ответ, потому что он бесплатный
можно ли это использовать для монтирования и размонтирования дисков с режимом сна и пробуждения? нам нужно писать сценарии автомата?
Спустя годы контрольная плоскость больше не поддерживается из-за накопления несовместимостей, которые Дастин опубликовал в своем блоге, и которые у него не было времени исправить. Жалко, хотя смысл есть.

Я разработал следующий простой 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 .

Так что наслаждайтесь! :

  1. Установить наблюдатель за сном =>brew install sleepwatcher
  2. Сначала создайте => ~/.wakeupи ~/.sleepскрипты и поместите в него некоторую логику оболочки
  3. Добавьте необходимые разрешения =>chmod 700 ~/.sleep && chmod 700 ~/.wakeup
  4. Протестировать локально => /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep- заснуть с запущенным терминалом
  5. Если это работает, загрузите процесс как агент запуска для всех пользователей =>/Library/LaunchAgents
  6. Добавить символическую ссылку для задачи запуска sleepwatcher =>sudo ln -sfv /usr/local/Cellar/sleepwatcher/2.2/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchAgents/
  7. Загрузить задачу запуска =>sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility.plist

Надеюсь, это поможет кому-нибудь :)

Sleepwatcher не работает у меня на calalina с внутренним SSD-диском. Я предполагаю, что SSD настолько быстр, что компьютер спит до того, как скрипт сможет запуститься.
Кажется, на меня не действует. Я на Каталине и просто бегу /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleepзависает.
@user3056783 user3056783 Я думаю, что это действительно работает так, как должно зависнуть, если вы запускаете его в терминале. Вот почему его следует запускать как процесс демона через LaunchAgents, как я упоминал в дальнейших шагах.
это ДЕЙСТВИТЕЛЬНО работает для меня в Каталине! Вы можете просто сделать, 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, и я добавлю его.