4 votes

Changement du mot de passe de l'écran de veille avec script.

J'utilise une application assez ancienne appelée Proximité pour déclencher des applescripts quand mon téléphone entre et sort de la portée bluetooth de mon mac. En plus d'autres tâches, je veux sécuriser mon ordinateur portable lorsque le téléphone est hors de portée (activer l'économiseur d'écran et le mot de passe), puis désactiver l'exigence du mot de passe lorsque mon téléphone revient à portée.

Avant 10.9

Cela fonctionnait (en grande partie) sous OS 10.8 et antérieur. Quand mon téléphone était hors de portée, je pouvais courir :

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 est un programme C compilé qui fait en sorte que l'économiseur d'écran relise les préférences d'exigence de mot de passe (de ce message du forum ).

Cela permettrait d'activer l'exigence d'un mot de passe, puis de lancer immédiatement l'économiseur d'écran. C'était le comportement correct si mon ordinateur portable se trouvait dans un environnement public. Cependant, à la maison, je ne voulais pas avoir à taper le mot de passe chaque fois que je sortais de la pièce et revenais une minute plus tard. J'ai donc ajouté une autre couche de complexité :

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

Ainsi, lorsque je suis à la maison, je ne dois taper mon mot de passe que si mon téléphone est hors de portée ET si mon ordinateur est resté inactif suffisamment longtemps pour déclencher la temporisation de l'économiseur d'écran (~20 minutes).

Quand mon téléphone revenait à portée, je courais :

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

Si l'économiseur d'écran était déjà en cours d'exécution, il fallait toujours taper le mot de passe pour déverrouiller l'ordinateur, mais le mot de passe n'était plus nécessaire si l'économiseur d'écran était relancé ultérieurement.

Il y avait un petit problème ici : occasionnellement (je crois qu'il n'y avait pas d'entrée utilisateur entre le moment où le script hors gamme et le script en gamme s'exécutaient, et l'économiseur d'écran avait été activé), l'écran était juste complètement noir au lieu d'afficher l'invite de mot de passe pour déverrouiller l'ordinateur. Cependant, dans ce cas, je pouvais tabuler dans le champ du mot de passe et taper le mot de passe à l'aveugle pour déverrouiller l'ordinateur.

En 10.9

Le changement le plus significatif que j'ai rencontré dans 10.9 se produit lorsque le mot de passe et l'économiseur d'écran sont activés, puis le mot de passe est désactivé, sans aucune saisie de l'utilisateur entre les deux. Lorsque je reviens ensuite pour déverrouiller l'ordinateur, l'écran de veille ne demande pas de mot de passe et revient immédiatement au bureau. Cependant, le clavier est toujours piégé par l'économiseur d'écran : je peux interagir avec les programmes à l'aide de la souris, mais toute frappe au clavier ne provoque qu'un son d'alerte ("Funk" des alertes standard).

Un exemple minimum qui provoque ce comportement est :

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"

Le principal moyen que j'ai trouvé pour sortir de cet état semi-verrouillé est de réactiver l'exigence du mot de passe et de relancer l'économiseur d'écran, puis d'entrer le mot de passe manuellement.

Le comportement le plus idéal (à mon avis) serait de verrouiller mon ordinateur dès que mon téléphone est hors de portée, puis de le déverrouiller automatiquement (sans qu'il soit nécessaire de taper un mot de passe) lorsque mon téléphone revient à portée. Cependant, depuis les versions précédentes du système d'exploitation, je travaille en supposant que l'utilisateur doit entrer pour déverrouiller l'ordinateur après que l'économiseur d'écran et le mot de passe aient été activés. Avec cette contrainte, le comportement souhaité est simplement de restaurer la fonctionnalité qui était présente avant la 10.9 - être capable de taper le mot de passe pour déverrouiller l'ordinateur lorsqu'il est à nouveau à portée, mais ne pas demander un mot de passe à nouveau jusqu'à ce que le téléphone soit hors de portée.

Avez-vous des suggestions sur la façon d'y parvenir ?

2voto

La même chose m'arrive en 10.9. J'ai également essayé de modifier require password to wake of security preferences et la mise en veille des écrans au lieu de lancer un économiseur d'écran :

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

Aucun d'eux n'a aidé cependant.

Vous pouvez cependant vous déconnecter sur l'écran de changement rapide d'utilisateur au lieu de verrouiller l'écran :

/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X