Commutazione della password dello screensaver con lo script

4

Sto utilizzando un'applicazione piuttosto vecchia chiamata Prossimità per attivare i "applecripts" quando il mio telefono entra e esce da gamma bluetooth del mio mac. Insieme ad altre attività, voglio proteggere il mio portatile quando il telefono esce dal raggio d'azione (abilita lo screensaver e la password), quindi disattiva il requisito della password quando il mio telefono ritorna all'intervallo.

Prima del 10.9

Ho avuto questo lavoro (principalmente) in OS 10.8 e versioni precedenti. Quando il mio telefono è andato fuori portata, potrei eseguire:

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

Il notifyScreensaver è un programma C compilato che rende lo screensaver riletto le preferenze del requisito della password (da questo post sul forum ).

Ciò consentirebbe il requisito per una password e quindi eseguirà immediatamente lo screensaver. Questo era il comportamento corretto se il mio portatile si trovava in un ambiente pubblico. Tuttavia, quando ero a casa, non volevo dover digitare la password ogni volta che uscivo dalla stanza e tornavo dopo un minuto. Quindi aggiungendo un altro livello di complessità:

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

Usando questo, quando sono a casa devo solo digitare la mia password se il mio telefono è fuori portata E se il mio computer è rimasto inattivo abbastanza a lungo da attivare il timeout dello screensaver (~ 20 minuti).

Quando il mio telefono è rientrato nell'intervallo eseguo:

do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 0"
do shell script "/Users/Chris/Library/Scripts/Proximity/notifyScreensaver"

Se lo screensaver era già in esecuzione, sarebbe comunque necessario digitare la password per sbloccare il computer, ma la password non sarebbe necessaria se lo screensaver fosse riavviato più tardi.

C'è stato un po 'di inconveniente qui: ogni tanto (credo che quando non c'era alcun input da parte dell'utente tra il tempo in cui lo script fuori range è stato eseguito e lo script in-range è stato eseguito e lo screensaver era stato abilitato), il schermo sarebbe completamente nero invece di mostrare la password per sbloccare il computer. Tuttavia in questo caso potrei inserire il campo della password e digitare la password ciecamente per sbloccare il computer.

In 10.9

Il cambiamento più significativo che ho riscontrato in 10.9 si verifica quando la password e lo screensaver sono abilitati e quindi la password è disabilitata, senza alcun input utente in mezzo. Quando poi torno indietro per sbloccare il computer, lo screensaver non richiede una password e torna immediatamente al desktop. Tuttavia, la tastiera è ancora intrappolata dallo screensaver: posso interagire con i programmi con il mouse, ma qualsiasi sequenza di tasti causa solo un suono di avviso ("Funk" dagli avvisi standard).

Un esempio minimo che provoca questo comportamento è:

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"

Il modo principale che ho trovato per uscire da questo stato semi-bloccato è riattivare il requisito della password e rieseguire lo screensaver, quindi inserire la password manualmente.

Il comportamento più ideale (secondo me) sarebbe bloccare il mio computer non appena il mio telefono esce dal raggio d'azione, quindi sbloccarlo automaticamente (senza l'obbligo di digitare una password) quando il mio telefono tornerà nella gamma . Tuttavia, poiché versioni precedenti del sistema operativo ho lavorato partendo dal presupposto che l'input dell'utente è necessario per sbloccare il computer dopo che sono stati inseriti i requisiti di salvaschermo e password. Con questo vincolo, il comportamento desiderato è solo quello di ripristinare la funzionalità che era presente prima del 10.9: essere in grado di digitare la password per sbloccare il computer quando è rientrato nell'intervallo, ma non richiedere più una password fino a quando il telefono non va oltre l'intervallo.

Qualche suggerimento su come realizzare questo?

    
posta Chris C 17.11.2013 - 19:17
fonte

1 risposta

2

La stessa cosa mi succede in 10.9. Ho anche provato a cambiare require password to wake of security preferences e mettere i display a dormire invece di avviare uno screen saver:

tell application "System Events"
    set require password to wake of security preferences to true
    --start screen saver "Random"
    do shell script "pmset displaysleepnow"
    delay 5
    set require password to wake of security preferences to false
end tell

Nessuno dei due ha aiutato comunque.

Potresti accedere allo schermo di cambio rapido utente invece di bloccare lo schermo:

/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
    
risposta data 18.11.2013 - 06:32
fonte

Leggi altre domande sui tag