2011-02-10 1 views
5

프로그래밍 방식으로 Mac을 깨우려고합니다. 그러나 IOPMSchedulePowerEvent를 사용하여 시작했지만 관리자 액세스 및 권한이있는 도우미가 필요합니다. 구현하고 작동하지만 너무 복잡합니다.Mac에서 시스템 환경 설정을 사용하여 프로그래밍 방식으로 시스템 깨우기를 예약하는 방법은 무엇입니까?

나는 더 나은 접근법을 찾아 보았고 시스템 환경 설정 -> 에너지 절약 -> 일정으로 이동하여 시스템을 깨우도록 예약 할 수 있음을 발견했습니다. 이 방법을 사용하여 깨우기 시간을 프로그래밍 방식으로 예약하는 방법이 있습니까?

감사합니다.

편집 : 시스템 시동 및 절전 시간을 예약하려면 시스템에 관리자 액세스 권한이 필요합니다. 괜찮아. 이 프로그래밍 방식으로 할 수 싶습니다. 사용자에게 기능을 인증하게하는 것은 한 번만 요청된다는 점에서 오케이입니다. 시스템 웨이크 업 시간을 설정하라는 후속 요청에는 사용자 권한이 필요하지 않습니다.

답변

2

IOPMSchedulePowerEvent을 사용하는 것이 올바른 일입니다. 그러나 권한있는 도우미 도구를 만드는 경우 사용자에게 암호를 묻는 메시지 만 표시하면됩니다. Apple의 BetterAuthorizationSample 코드는이를 수행하는 방법에 대한 예제를 제공합니다. 제 3 자 수정 인 AuthorizedTasksInCocoa도 있는데, 사용하기가 좀 쉬울 수도 있습니다 (아직 사용해 보지 않았습니다).

+0

@Nicholas, 나는 이미 BAS를 사용하여 도우미를 구현했지만, BAS는 launchd를 사용하여 도우미를 실행합니다. 이렇게함으로써 launchd는/Library/LaunchDaemons에 헬퍼 데몬을 설치해야합니다. 애플의 승인을받은 방법이지만 맥 앱 스토어의 경우 애플은 파일 애플리케이션 파일 위치에 대한 규칙 중 하나를 위반하기 때문에 그것을 좋아하지 않는다. – David

+1

Mac App Store에 제출하려면이 작업을 수행 할 수 없습니다. 이것은 의도적으로 설계된 것이며 주변에는 방법이 없습니다.이것이 당신에게 문제가된다면 Apple에 버그를 신고하십시오. 언젠가 언젠가는 규칙을 바꿀 것입니다. (권한 부여를 사용하는 다른 응용 프로그램은 Mac App Store에서 권한 부여 기능을 제거하는 별도의 버전을 가지고 있습니다.) –

+0

글쎄, 수면에서 시스템을 깨우는 것이 가능하다는 점은 알고 있습니다. 오로라). Aurora 응용 프로그램은 하나의 관리자 인증이 필요하며 시스템을 잠자기 상태에서 깨우기 위해 도우미 도구를 사용합니다. 나는 그들이 발사대를 사용하지 않는 방법을 얻을 수있는 방법을 이해하지 않습니다. – David

0

저는 관리자 액세스가 필요하다고 확신합니다. 예를 들어, 관리자로 로그인하거나 시스템 환경 설정에 관리자로 인증하지 않은 경우 시스템 환경 설정 -> 에너지 절약 -> 일정의 옵션을 사용할 수 없습니다. 특별한 privs 없이도 할 수있는 방법을 발견했다면, 나는 그것을 애플이 보안 버그라고 생각하고 그것을 고칠 것이다.

+0

ok 관리자 액세스가 필요하지만 프로그래밍 방식으로 시스템 슬립 및 웨이크 업 스케줄러에 액세스하는 방법을 알고 있습니까? – David

1

난 당신에 대한 전체 답변을하지 않습니다, 그러나 이것은 대단히 도움이 될 것입니다 http://www.opensource.apple.com/source/PowerManagement/PowerManagement-211/pmset/pmset.c

것은 당신이하고 싶은 것 것은 kIOPMAutoWake를 예약 할 수 있습니다. 코드에서 그 상수 (변형이 아닌)를 찾아서 읽기 시작하십시오. 그다지 길지 않습니다.

아마 심지어 pmset을 사용할 수도 있지만 꽤 우아하지 않을 것입니다.

올리는 것에 관해서는 애플이 Secure Coding Guide에서 말하고있다.

0

전원 관리자를 통해 IOPMSchedulePowerEvent로 웨이크 업 이벤트를 스케줄 할 수 있습니다. 즉각적인 일어나기를 예약 할 수 있습니다. pmset은 전원 관리자를위한 명령 줄 래퍼입니다. 어떤 경우에는 IOCancelPowerChange로 수면을 예방할 수도 있습니다.

마우스 나 키 이벤트를 생성하여 잠자기 또는 깨우기를 방지 할 수 있습니다. 이벤트를 생성하는 한 가지 방법은 CGPostKeyboardEvent를 사용하는 것입니다.

==> 일반 수면은 조개 껍질 닫힌 수면과 다릅니다. 후자에 영향을 미치려면 Insomnia와 같은 커널 확장을 작성해야합니다.