Лечим бессонницу Mac OS X
Дек 23
2013
osx, Всякое mavericks, osx, sleep No Comments
После обновления до Mavericks, у моего мини-мака несколько раз приключались трудности с засыпанием.
Как обычно, нажимаю ? ? Режим сна. Экран гаснет. Но комп остаётся включенным — светодиод продолжает светиться, вместо того чтобы начать плавно мигать.
Решил починить.
1. Метод тыка.
Возможно помогала перезагрузка. Но часто делать её не люблю — долгая. Сон удобнее.
Возможно помогала выгрузка некоторых приложений и смена AppNap для них.
После пары раз, хоть и редких, этот метод надоел — ясности ведь нет.
Полез в интернет искать решение.
2. Советы с эппл-сайта.
Нашёл статью в KB: OS X Mavericks: If your Mac won’t go to or stay in sleep
Нашёл целый раздел, посвящённый «бессоннице».
И универсальный ответ, встречающийся во многих темах.
Ясности ответ не добавляет — просто содержит «магические действия», которые могут помочь.
Вплоть до сброса SMC, манипуляций в safe mode и переустановки системы.
Для тяжёлых случаев может пригодиться. Но хочется понимать причину.
Наверняка ответ есть в логах!
Ведь при ошибке что-то туда должно записываться.
Например, имя программы, которая является помехой.
3. Cheat-code
Начал было искать инфу о логах на маке. Но раньше попалась замечательная команда pmset.
С её помощью можно узнать, какие процессы запросили «права»,
касающиеся управления питанием. В т.ч. режимом сна.
В терминале вызываем:
pmset -g assertions
И видим список вроде этого:
Assertion status system-wide: BackgroundTask 1 PreventDiskIdle 0 ApplePushServiceTask 0 UserIsActive 0 PreventUserIdleDisplaySleep 0 InteractivePushServiceTask 0 PreventSystemSleep 1 ExternalMedia 0 PreventUserIdleSystemSleep 1 NetworkClientActive 0 Listed by owning process: pid 21203(uTorrent): [0x00000001000008a2] 38:26:25 NoIdleSleepAssertion named: "there are active torrents" pid 339(coreaudiod): [0x00000001000027f3] 00:01:17 NoIdleSleepAssertion named: "com.apple.audio.'AppleHDAEngineInput:1B,0,1,1:2'.noidlesleep" pid 339(coreaudiod): [0x00000001000027db] 00:01:20 NoIdleSleepAssertion named: "com.apple.audio.'AppleHDAEngineOutput:1B,0,1,2:0'.noidlesleep" pid 25147(smbd): [0x0000000800001b37] 17:56:55 DenySystemSleep named: "com.apple.smbd" pid 16(UserEventAgent): [0x0000000c000027eb] 00:01:19 BackgroundTask named: "com.apple.SoftwareUpdate.Activity"
В первом списке (Assertion status system-wide) перечислены выданные «разрешения».
Если напротив PreventSystemSleep стоит 1, то заснуть компьютер не сможет.
Если 1 напротив PreventUserIdleSystemSleep, то усыпить его можно только вручную.
От бездействия в спящий режим не перейдёт.
Во втором списке (Listed by owning process) перечислены процессы.
Как видно, из-за торрент-клиента и звукового драйвера,
мини-мак не мог заснуть от бездействия. Рядом с ними указано NoIdleSleepAssertion.
А smbd не давал ему заснуть вообще. У него проставлен DenySystemSleep.
Чтоб заснуть — закрываю программу или меняю её настройки.
В uTorrent есть настройка, отвечающая за препятствование засыпанию.
В случае coreaudiod я мог выключить потоковое вещание в отдельной программе.
Если не ясно, что за процесс такой, спрашиваем у яндекса/гугла.
Я например не сразу сообразил, что такое smbd.
Поискал «com.apple.smbd», понял, что это про SMB — общий доступ к сети из Windows.
Отключил в настройках системы. Бессонницы больше нет.
Единственное в чём не разобрался — почему раньше SMB не мешал спать. И при каких условиях мешает.
Пока оставил выключенным, включаю только когда доступ из Windows нужен, что бывает редко.