Лечим бессонницу Mac OS X

No Comments

osx-sleep-mode-menu

После обновления до 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 нужен, что бывает редко.

Комментирование выключено.