Desactivar el requisito de contraseña del protector de pantalla desde la línea de comandos

11

Estoy tratando de habilitar y deshabilitar el requisito de contraseña del protector de pantalla desde la línea de comandos.

defaults read com.apple.screensaver

muestra una variable askForPassword establecida en 0 o 1, dependiendo de si configuré un requisito de contraseña en Preferencias del sistema o no.

defaults write com.apple.screensaver askForPassword 1

y

defaults write com.apple.screensaver askForPassword 0

habilitar y deshabilitar la configuración de contraseña, o eso pensé.

Lo que encuentro en cambio es que los comandos de hecho marcan y desmarcan la casilla de verificación en Preferencias del sistema en Seguridad, pero no afectan en absoluto al protector de pantalla.

Si habilito la contraseña en Preferencias del sistema y luego la desactivo usando el segundo comando de escritura predeterminado, la casilla de verificación en Preferencias del sistema no está marcada, pero el protector de pantalla aún solicitará una contraseña. Solo marcar y desmarcar la casilla de verificación en Preferencias del sistema puede cambiar este comportamiento ahora.

Y si desactivo la contraseña en Preferencias del Sistema y luego la habilito usando el primer comando de escritura predeterminado, la casilla de verificación en Preferencias del Sistema está marcada, pero el protector de pantalla no solicitará una contraseña. Solo desmarcar y marcar la casilla de verificación en Preferencias del Sistema cambia el comportamiento después.

¿Que esta pasando?

Puedo imaginar que esta es una configuración global y debería modificar en /Library/Preferences/com.apple.screensaverlugar del dominio del usuario. Pero en ese caso, ¿por qué hay un efecto en la casilla de verificación Preferencias del sistema?

Andrew J. Brehm
fuente
Esto es un poco desconcertante. Observé la lectura / escritura de archivos mientras alternaba la configuración de 'solicitar contraseña'. El único archivo que puedo ver que se modifica es com.apple.screensaver. Supongo que se envía un mensaje a algún servicio cuando se activa este botón en la GUI y se escribe en el archivo plist. Apostaría a que reiniciar el sistema o cerrar / cerrar sesión podría hacer que dicho servicio vuelva a leer el archivo, haciendo el cambio deseado.
macaco
1
¡Yo tenía razón! Cerrar sesión y volver a iniciarla después de cambiar el archivo plist hace que se refleje el cambio en la configuración. Por lo tanto, parece que necesita encontrar qué servicio está controlando el comportamiento de 'solicitar contraseña' y restablecerlo / cargarlo después de modificar la lista.
macaco
Parece que Apple está socavando su propio mecanismo de plist.
Andrew J. Brehm
Ejército de reserva. Espero que alguien lo sepa y responda aquí.
Andrew J. Brehm
1
Es el proceso de 'ventana de inicio de sesión' que parece acceder a este archivo después de haber sido escrito por las Preferencias del Sistema. Lo cual tiene sentido. Desafortunadamente, matar el proceso de la ventana de inicio de sesión lo cerrará forzosamente. ¡Sigue cavando!
macaco

Respuestas:

7

Si no está obligado a utilizar los valores predeterminados de escritura , puede utilizar el siguiente comando. Interactúa con el sistema operativo de la misma manera que si utilizara las Preferencias del sistema.

Probado en:

  • 10.5.x
  • 10.6.x
  • 10.7.x
  • 10.8.x
  • 10.9.x

sudo osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'

NOTA: Si el comando se ejecuta dentro de un script al que se le han otorgado privilegios de root, no necesitaría el sudo .

osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
E1Suave
fuente
¡Agradable! La línea de comando AppleScript es a menudo una buena solución para este tipo de problema.
Daniel
@DanielLawson Gracias, ¿estás trabajando actualmente en 10.7? En general, me gusta publicar en qué sistemas operativos he probado mis comandos y, lamentablemente, esta mañana estoy atascado con una vieja máquina Snow Leopard y no tendré acceso a una máquina 10.7 hasta más tarde hoy. Odiaría que funcionara en 10.6.x y fallara en 10.7 :–( Sin embargo, estoy bastante seguro de que esto funcionará ya que las listas son muy similares. Sé que 10.5's screensaver.plist es diferente y se necesitarán algunos ajustes De todos modos, gracias de nuevo. :–)
E1Suave
1
He probado esto en 10.7.5 en OS X Server y no funciona. El protector de pantalla aún requiere una contraseña y la preferencia no está desmarcada.
1
Esto funciona para mí el 10.11 (El Capitan). Lo encontré en este hilo ( github.com/dustinrue/ControlPlane/issues/421 )
GTF
1
El método "osascript" no funciona en mi High Sierra Mac. El archivo ~ / Library / Preferences / com.apple.screensaver.plist no parece verse afectado por el cambio de GUI en mi High Sierra Mac.
Kent
3

Me encontré con un problema similar y encontré una solución del usuario Guillaume en esta publicación del foro . Básicamente, debe forzar al protector de pantalla para que vuelva a leer la preferencia de requisito de contraseña, lo que puede hacer con un programa en C:

#include <CoreFoundation/CoreFoundation.h>

int main(int argc, char ** argv)
{
    CFMessagePortRef port = CFMessagePortCreateRemote(NULL, CFSTR("com.apple.loginwindow.notify"));
    CFMessagePortSendRequest(port, 500, 0, 0, 0, 0, 0);
    CFRelease(port);
    return 0;
}

Y compile esto con:

cc -o /tmp/anywhereyouwantit/notif notif.c -framework CoreFoundation

Luego llame a este programa inmediatamente después de su llamada a defaults write

Chris C
fuente
Actualización: en High Sierra (10.13.6) esto compila, pero informa este error: "ld: advertencia: archivo de resguardo basado en texto /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd y el archivo de biblioteca / System / Library /Frameworks//CoreFoundation.framework/CoreFoundation no está sincronizado. Vuelve al archivo de la biblioteca para vincularlo ". Falla con una falla de segmentación cuando se ejecuta.
TJ Luoma