Estoy usando un viejo aplicación llamada Proximidad para activar applescripts cuando el teléfono entra y sale del rango de bluetooth de mi mac. Junto con otras tareas, quiero asegurar mi laptop cuando el teléfono está fuera del intervalo (activar protector de pantalla y contraseña) y, a continuación, deshabilitar el requisito de contraseña cuando el teléfono vuelve a la gama.
Antes de 10.9
Yo tenía este trabajo (en su mayoría) en OS 10.8 y anteriores. Cuando mi teléfono salió fuera de rango, yo podría ejecutar:
do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 1"
do shell script "/Users/Chris/Library/Scripts/Proximity/notifyScreensaver"
tell application "System Events"
set ss to screen saver "Soundstream"
start ss
end tell
El notifyScreensaver
es un compilado programa en C que hace que el protector de pantalla releer el requisito de contraseña de preferencias (de este post del foro).
Esto permitiría que el requisito de una contraseña y, a continuación, inmediatamente ejecutar el protector de pantalla. Este fue el comportamiento correcto para si mi portátil estaba en un entorno público. Sin embargo, cuando en casa, no quería tener que escribir la contraseña cada vez que yo salía de la habitación y regresó un minuto más tarde. Para añadir otra capa de complejidad:
do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 1"
do shell script "/Users/Chris/Library/Scripts/Proximity/notifyScreensaver"
set ssid to getWifiSSID()
if ssid is equal to "RouterName" then
(* if at home, only enable password requirement without triggering screensaver *)
else
(* if not at home, lock screen immediately *)
tell application "System Events"
set ss to screen saver "Soundstream"
start ss
end tell
end if
on getWifiSSID()
set theWiFi to do shell script "wifi=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'`
echo $wifi
"
return theWiFi
end getWifiSSID
El uso de este, cuando estoy en casa solo necesito escribir mi contraseña si mi teléfono está fuera de rango, Y si mi equipo ha estado inactivo durante el tiempo suficiente para activar el protector de pantalla de tiempo de espera (~20 minutos).
Cuando el teléfono volvió a rango iba a funcionar:
do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 0"
do shell script "/Users/Chris/Library/Scripts/Proximity/notifyScreensaver"
Si el protector de pantalla ya estaba en marcha, uno todavía tiene que escribir la contraseña para desbloquear el equipo, pero la contraseña no sería necesario si el protector de pantalla se inició de nuevo más tarde.
Hubo un poco de un problema aquí: de vez en cuando (creo que cuando no había ninguna entrada de usuario entre el momento en que el fuera-de-rango de secuencia de comandos se ejecutó y el rango de secuencia de comandos se ejecutó, y el protector de pantalla se habían habilitado), la pantalla sería completamente negro en lugar de mostrar el indicador de solicitud de contraseña para desbloquear el equipo. Sin embargo, en este caso yo podría ficha en el campo contraseña, escriba la contraseña a ciegas para desbloquear el equipo.
En 10.9
El cambio más significativo que he encontrado en 10.9 se produce cuando la contraseña y el protector de pantalla está activado y, a continuación, la contraseña está deshabilitada, sin ninguna entrada del usuario entre. Cuando yo haga volver a desbloquear el equipo, el protector de pantalla no requiere una contraseña e inmediatamente salta de nuevo al escritorio. Sin embargo, el teclado está todavía atrapado por el protector de pantalla: puedo interactuar con programas con el ratón, pero cualquiera de las pulsaciones de teclado sólo causa un sonido de alerta ("Funk" de la norma de alertas).
Un mínimo ejemplo de que la causa de este comportamiento es:
do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 1"
do shell script "/Users/Chris/Library/Scripts/Proximity/notifyScreensaver"
tell application "System Events"
set ss to screen saver "Soundstream"
start ss
end tell
delay 5
do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 0"
do shell script "/Users/Chris/Library/Scripts/Proximity/notifyScreensaver"
La principal forma que he encontrado para salir de esta semi-estado de bloqueado es para volver a habilitar el requisito de contraseña y vuelva a ejecutar el protector de pantalla y, a continuación, introduzca la contraseña manualmente.
La mayoría comportamiento ideal (en mi opinión) sería bloquear mi ordenador tan pronto como mi teléfono sale de rango, a continuación, desbloquear automáticamente (sin necesidad de escribir una contraseña) cuando mi teléfono vuelve a la gama. Sin embargo, desde anteriores versiones del sistema operativo que he estado trabajando bajo la suposición de que la entrada del usuario es necesaria para desbloquear el equipo después de que el protector de pantalla y el requisito de contraseña ha sido comprometida. Con esta restricción, el comportamiento deseado es sólo para restaurar la funcionalidad que estaba presente antes de 10.9 – ser capaz de escribir la contraseña para desbloquear el equipo cuando está en el rango, pero no se requiere una contraseña de nuevo hasta que el teléfono sale de rango.
Cualquier sugerencia sobre cómo lograr esto?