Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lock screen by API in macOS

Tags:

macos

cocoa

Is there an API, that can lock the screen as the menu bar entry you can add from Keychain preferences?

This Keychain function is (was) locking the screen but not bringing the system to sleep.

like image 927
asfsa Avatar asked Dec 29 '09 19:12

asfsa


People also ask

Is there a way to lock your screen on Mac?

Immediately lock the screen of your Mac On your Mac, choose Apple menu > Lock Screen. Use hot corners. Press Touch ID, if it's available on your Mac or Magic Keyboard. Press the Lock Screen button, if it's available on your Magic Keyboard.


1 Answers

It's not officially documented and uses private API, but the following works on MacOS 10.10 (and maybe also on earlier systems):

// lockscreen.c
extern int SACLockScreenImmediate ( void );

int main ( ) {
    return SACLockScreenImmediate();
}

Build with:

clang -F /System/Library/PrivateFrameworks -framework login -o lockscreen lockscreen.c 

Now calling ./lockscreen will lock the screen immediately, regardless what the user has configured in their security preferences (whether to lock on screensaver/system sleep) and without logging the user out. This is the function the system uses internally for locking the screen.

I strongly discourage using it, it may break your app and I'm not even sure I am calling it correctly (maybe it needs arguments, maybe it has a return value), so it may even break your whole system (temporarily - reboot will fix everything), who knows. I just wanted to post that somewhere for documentation.

If someone with better hacker skills than me can analyze this call some more, this would be nice and useful.

like image 96
Mecki Avatar answered Sep 28 '22 08:09

Mecki