Как программно запланировать пробуждение системы, используя системные настройки на Mac? - PullRequest
5 голосов
/ 10 февраля 2011

Я хотел бы программно разбудить Mac. Я начал с использования IOPMSchedulePowerEvent, однако этот метод требует административного доступа и привилегированных помощников. Я реализовал, и это работает, но это слишком сложно.

Я искал лучший подход и обнаружил, что вы можете запланировать запуск системы, перейдя в Системные настройки -> Экономия энергии -> Расписание. Есть ли способ программно запланировать время пробуждения, используя этот метод?

Спасибо.

Редактировать: Я понимаю, что для доступа к расписанию и времени ожидания системы требуется доступ администратора. Все в порядке. Я хотел бы быть в состоянии сделать это программно. Если пользователь авторизует функциональность, это нормально, если его спросить только один раз. Последующие запросы на установку времени пробуждения системы не должны требовать авторизации пользователя.

Ответы [ 4 ]

2 голосов
/ 19 февраля 2011

Использование IOPMSchedulePowerEvent - правильная вещь. Однако, если вы создаете привилегированный вспомогательный инструмент, вам нужно только один раз запросить у пользователя его / ее пароль. Код Apple BetterAuthorizationSample предоставляет пример того, как это сделать; есть также сторонняя модификация, AuthorizedTasksInCocoa , которая может быть немного проще в использовании (я не пробовал).

1 голос
/ 19 февраля 2011

У меня нет полного ответа для вас, но это должно очень помочь: http://www.opensource.apple.com/source/PowerManagement/PowerManagement-211/pmset/pmset.c

Что вы хотите сделать, это запланировать kIOPMAutoWake.Найдите эту константу (а не ее вариант) в коде и начните чтение.Это не так долго.

Возможно, вы даже можете использовать pmset напрямую, но это было бы довольно не элегантно.

Что касается повышения, Apple об этом говорит в Руководство по безопасному кодированию .

0 голосов
/ 22 февраля 2011

Вы можете запланировать события пробуждения с помощью IOPMSchedulePowerEvent через менеджер питания. Вы можете запланировать немедленное пробуждение. pmset - это оболочка командной строки для менеджера питания. В некоторых случаях вы также можете предотвратить сон с помощью IOCancelPowerChange.

Вы можете предотвратить сон или пробуждение, генерируя событие мыши или клавиши. Один из способов генерировать события - это CGPostKeyboardEvent.

==> Нормальный сон отличается от закрытого сна раскладушки. Чтобы повлиять на последнее, вы должны написать расширение ядра, например, Insomnia.

0 голосов
/ 10 февраля 2011

Я почти уверен, что это требует административного доступа.Например, параметры в Системных настройках -> Экономия энергии -> Расписание недоступны, если вы не вошли в систему как администратор или не прошли аутентификацию в Системных настройках как администратор.Если бы вы нашли способ сделать это без каких-либо специальных привилегий, я бы ожидал, что Apple расценит это как ошибку безопасности и исправит ее (тем самым нарушив вашу программу).

...