Pull to refresh

Автоматическая блокировка экрана в MacOSX

Reading time3 min
Views1.6K
Читая данное сообщество как простой смертный незарегестрированный читатель натолкнулся на данную статью, которая меня просто вынудила получить инвайт и зарегиться. В данном топике было предложено очень много вариантов блокировки экрана с минимальным участием пользователя, но все они, на мой взгляд, несколько «тяжелые». В каждом из способов нужно было что-то нажимать, куда-то кликать, а лень, как известно, побеждает мир (в хорошем смысле).

Итак, хотел бы представить Вашему взору один из способов довести все до автоматизма.
Из чего готовим:
1) Должен быть установлен пакет Xcode, для нормального пользования скриптов
2) Программа BluePhoneElite, которая имеет кучу встроенных триггеров (Itunes, DVD, смена статусов iChat, etc.)
3) Мобильный телефон с Bluetooth (надеюсь у каждого есть? :) ) для того чтобы никуда не щелкать мышкой.
4) Keychain ;)



Как готовить:
1) Начнем с простого — с установки BluePhoneElite на компьютер. Программа платная, но стоит своих денег (ИМХО). Как поставить программу и «спарить» с телефоном думаю не у кого вопросов не возникнет.
2) Открываем Программы — Служебные — Связка ключей (Keychain) и создаем объект с именем BluePhone с Вашим именем пользователя и паролем. (понадобится для автоматического ввода пароля)
3) Открываем настройки Системы — Безопасность и ставим галку «Требовать пароль при выходе из режима сна и заставки».
4) Открываем AppleScript и вот тут-то начинается все веселье :). Копипастим туда следующий скрипт:
using terms from application "BluePhoneElite 2"
on proximity change phone with event theEvent

if theEvent is "exited" then
set the target_app to ((path to "dlib" from system domain as string) & ¬
"Frameworks:ScreenSaver.framework:Versions:A:Resources:ScreenSaverEngine.app") as alias

set process_flag to false
tell application "System Events"
if exists process "ScreenSaverEngine" then set process_flag to true
if (application processes whose name is "SecurityAgent") is not {} then
if windows of process "SecurityAgent" is not {} then set the process_flag to true
end if
end tell

if process_flag is false then tell application (target_app as string) to launch
end if

if theEvent is "entered" then

set the process_flag to false
tell application "System Events"
if exists process "ScreenSaverEngine" then
set the process_flag to true
tell application "System Events" to keystroke return
else
if (application processes whose name is "SecurityAgent") is not {} then
if windows of process "SecurityAgent" is not {} then set the process_flag to true
end if
end if
end tell

if the process_flag is false then return

set now to current date
repeat
tell application "System Events"
if (application processes whose name is "SecurityAgent") is not {} then
if (windows of process "SecurityAgent") is not {} then

tell application "Keychain Scripting"
set MP to password of key 1 of keychain ¬
"login.keychain" whose name is "BluePhone"
end tell

tell window 1 of application process "SecurityAgent"
keystroke MP
click button "OK" of group 2
end tell

return
end if
end if
end tell
if ((current date) - now) is greater than 20 then exit repeat
delay 0.2
end repeat
end if

end proximity change
end using terms from

Сохраняем его в своей папке пользователя (по желанию).

5) Назначаем триггер реакции «Enter/Exit Range» Applescript и указываем файлик со скриптом.
6) Идем в Настройки — Универсальный доступ и ставим галочку «Включить доступ для вспомогательных устройств».

Done!

Теперь как только мы отходим от компа вместе с телефоном — включается заставка, останавливается фильм, музыка и прочее, а как только появляемся около компа — скрипт автоматически введет за Вас пароль и пазлочит экран :)
Надеюсь что данный пост поможет решить сие неудобство при блокировке экрана.

P.S.: Сильно не пинать — моя первая запись. :)
Tags:
Hubs:
Total votes 12: ↑10 and ↓2+8
Comments14

Articles