Совершенно не готов был столкнуться с такой проблемой, но вот она. Принес ноутбук, подключил питание, монитор, USB шнурок. В мониторе хаб, к нему подключена клавиатура и внешний диск. Солнце село, отправил макбук в сон, отключил монитор, питание и выдернул шнурок USB…
Проблема первая — ноут просыпается при отключении USB. Внешний монитор не включает, но «сонно дышащий» индикатор делает вдох и с минуту снова светитится постоянно.
Проблема вторая — при следующем включении вас ждет уведомление — диск извлечен неправильно.
С одной стороны, компьютер мог уснуть ненадолго, либо никто его никуда нести не собирался, короче, отключать провода не планировалось.
С другой стороны, спящий ноут — то же выключенный (я свой не помню когда выключал по-настоящему). Не надо бы ему просыпаться при отключении проводов, ой не надо. Ну и ругаться затем на неверно извлеченный диск тоже.
Самое разумное решение — отключать внешние диски при засыпании, подключать при пробуждении. Автоматически. Незаметно. Но Маки этого не умеют. Хуже того, Automator нельзя научить выполнять эти фокусы — нет триггеров onsleep/onwake.
Решения, которые я рассматривал и что в итоге выбрал.
Jettison (AppStore, 66 рублей)
Jettison automatically ejects external disks from your Mac before your computer goes to sleep and remounts them when it wakes.
Извлекет внешние диски из вашего Мака перед тем, как ваш компьютер засыпает и подключает их при пробуждении. Именно то, что требуется. Есть нюанс — в отзывах пишут: HDD не подключается после сна. Полагаю, речь о ситуации, когда диск на время сна физически не отключали. Второе наблюдение — в AppStore предлагается версия 1.2.4 от октября 2012, а на сайте разработчика доступна версия Jettison 1.3, уже за $4.95. Обновить AppStore версию до 1.3 можно, скачав новую с сайта разработчика. Отчего так сложно — не понять.
autoEJECT (99 руб, AppStore)
Похожее описание, те же функции, та же неясность с версией — сделано в 2012 году, требуется OS X 10.6 или более поздняя версия. Для этого приложения даже сайта нет, ссылка ведет на почтовый ящик разработчика.
Оба приложения, при условии их работоспособности, выглядят излишне жирным решением для простой задачи. Мне ни к чему эти иконки в строке системного меню, настройки, выпадушки…
SleepWatcher, бесплатно
Это daemon AKA «демон», процесс, который мониторит сон/пробуждение/простой/бодрствование компьютера и позволяет выполнять разные штуки при возникновении этих событий.
Заряжаем Терминал (у меня iTerm2) и вперед.
comp:~ user$ cd ~ comp:~ user$ curl http://www.bernhard-baehr.de/sleepwatcher_2.2.tgz >sw.tgz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 43385 100 43385 0 0 20017 0 0:00:02 0:00:02 --:--:-- 20020 comp:~ user$ tar -xzf sw.tgz comp:~ user$ cd sleepwatcher_2.2/ comp:sleepwatcher_2.2 user$ ls ReadMe.rtf config sleepwatcher sleepwatcher.8 sources comp:sleepwatcher_2.2 user$ sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8 Password: comp:sleepwatcher_2.2 user$ sudo cp ~/sleepwatcher_2.2/sleepwatcher /usr/local/sbin comp:sleepwatcher_2.2 user$ sudo cp ~/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8 comp:sleepwatcher_2.2 user$ sudo mv ~/sleepwatcher_2.2/config/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist comp:sleepwatcher_2.2 user$ sudo chown root ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist comp:sleepwatcher_2.2 user$ sudo chmod 644 ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist comp:sleepwatcher_2.2 user$ sudo launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist comp:sleepwatcher_2.2 user$ nano ~/.sleep comp:sleepwatcher_2.2 user$ nano ~/.wakeup comp:sleepwatcher_2.2 user$ chmod a+x ~/.sleep ~/.wakeup comp:sleepwatcher_2.2 user$
Содержимое скриптов, которые и выполняют всю работу
comp:sleepwatcher_2.2 user$ cat ~/.sleep #!/bin/sh /usr/sbin/diskutil list | grep -e 'disk[1-9]s.*' | sed 's/.*\(disk[0-9].*\)/\1/' | xargs -I{} /usr/sbin/diskutil eject {} comp:sleepwatcher_2.2 user$ cat ~/.wakeup #!/bin/sh sleep 5 /usr/sbin/diskutil list | grep -e 'disk[1-9]s.*' | sed 's/.*\(disk[0-9].*\)/\1/' | xargs -I{} /usr/sbin/diskutil mount {}
Если у вас 2 внутренних диска, как в моем случае, нужно в каждом файле поменять disk[1-9] на disk[2-9], поскольку внутренние накопители извлекать и подключать насильно ни к чему.
Проверил, работает. Первая строчка — Мак засыпает, вторая — просыпается.
Feb 27 17:59:55 comp kernel[0]: hfs: unmount initiated on MeinAusweis on device disk2s1 Feb 27 18:01:43 comp kernel[0]: hfs: mounted MeinAusweis on device disk2s1
Иная ситуация, немного иные задачи, те же методы и гораздо более подробное изложение — Automatically eject external disks on sleep and reconnect after on OS X.