Nonaktifkan persyaratan kata sandi screensaver dari baris perintah

11

Saya mencoba untuk mengaktifkan dan menonaktifkan persyaratan kata sandi screensaver dari baris perintah.

defaults read com.apple.screensaver

memperlihatkan variabel askForPassword yang disetel ke 0 atau 1, tergantung pada apakah saya mengonfigurasi persyaratan kata sandi di Preferensi Sistem atau tidak.

defaults write com.apple.screensaver askForPassword 1

dan

defaults write com.apple.screensaver askForPassword 0

aktifkan dan nonaktifkan pengaturan kata sandi, atau begitulah menurut saya.

Yang saya temukan adalah bahwa perintah memang memeriksa dan menghapus centang pada kotak di Preferensi Sistem di bawah Keamanan tetapi tidak mempengaruhi screensaver sama sekali.

Jika saya mengaktifkan kata sandi di System Preferences dan kemudian menonaktifkannya menggunakan perintah tulis default kedua, kotak centang di System Preferences tidak dicentang, tetapi screensaver masih akan meminta kata sandi. Hanya memeriksa dan menghapus centang pada kotak di Preferensi Sistem yang dapat mengubah perilaku ini sekarang.

Dan jika saya menonaktifkan kata sandi di System Preferences dan kemudian mengaktifkannya menggunakan perintah tulis default pertama, kotak centang di System Preferences dicentang, tetapi screensave tidak akan meminta kata sandi. Hanya menghapus centang dan memeriksa kotak centang di Preferensi Sistem yang mengubah perilaku setelahnya.

Apa yang sedang terjadi?

Saya dapat membayangkan bahwa ini adalah pengaturan global dan saya harus memodifikasi /Library/Preferences/com.apple.screensaverdaripada domain pengguna. Tetapi dalam kasus itu, mengapa ada efek pada kotak centang Preferensi Sistem?

Andrew J. Brehm
sumber
Ini agak membingungkan. Saya telah menonton file baca / tulis sementara mengubah pengaturan 'minta kata sandi'. Satu-satunya file yang saya lihat dimodifikasi adalah com.apple.screensaver. Saya menduga bahwa pesan dikirim ke beberapa layanan ketika tombol ini diaktifkan di GUI serta menulis ke file plist. Saya bertaruh bahwa me-reboot sistem atau keluar / masuk dapat menyebabkan file dibaca ulang oleh layanan tersebut, membuat perubahan yang diinginkan.
macaco
1
Saya benar! Logout dan kembali lagi setelah mengubah file plist menyebabkan perubahan pengaturan tercermin. Jadi, sepertinya Anda perlu menemukan layanan mana yang mengendalikan perilaku 'minta kata sandi' dan mengatur ulang / memuatnya kembali setelah memodifikasi daftar.
macaco
Sepertinya Apple merusak mekanisme plist mereka sendiri.
Andrew J. Brehm
Ta. Saya harap seseorang akan tahu itu dan menjawab di sini.
Andrew J. Brehm
1
Ini proses 'loginwindow' yang tampaknya mengakses file ini setelah ditulis oleh System Preferences. Itu masuk akal. Sayangnya, mematikan proses loginwindow akan memaksa Anda keluar. Terus gali!
macaco

Jawaban:

7

Jika Anda tidak dipaksa untuk menggunakan penulisan default, Anda dapat menggunakan perintah berikut. Berinteraksi dengan OS sama seperti jika Anda menggunakan System Preferences.

DIUJI PADA:

  • 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'

CATATAN: Jika perintah dijalankan di dalam skrip yang telah diberikan hak akses root, Anda tidak perlu sudo .

osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
E1Suave
sumber
Bagus! Baris perintah AppleScript seringkali merupakan solusi yang bagus untuk masalah seperti ini.
Daniel
@DanielLawson Terima kasih, apakah saat ini Anda bekerja pada 10.7? Saya biasanya suka memposting OS apa yang telah saya uji perintah saya dan sayangnya pagi ini saya terjebak dengan mesin Snow Leopard tua dan tidak akan memiliki akses ke mesin 10.7 sampai hari ini. Saya akan benci untuk itu berfungsi pada 10.6.x dan gagal pada 10.7 :–( Namun, saya cukup yakin ini akan berfungsi sebagai plists sangat mirip. Saya tahu screensaver.plist 10.5 berbeda dan diperlukan beberapa penyesuaian diperlukan Bagaimanapun, terima kasih lagi. :–)
E1Suave
1
Saya telah menguji ini pada 10.7.5 pada OS X Server dan tidak berfungsi. Screensaver masih memerlukan kata sandi dan preferensi tidak dicentang.
1
Ini bekerja untuk saya pada 10.11 (El Capitan). Ditemukan dari utas ini ( github.com/dustinrue/ControlPlane/issues/421 )
GTF
1
Metode "osascript" tidak berfungsi pada High Sierra Mac saya. File ~ / Library / Preferences / com.apple.screensaver.plist tampaknya tidak terpengaruh oleh sakelar GUI di High Sierra Mac saya.
Kent
3

Saya mengalami masalah serupa, dan menemukan solusi dari pengguna Guillaume pada posting forum ini . Pada dasarnya, Anda perlu memaksa screensaver untuk membaca kembali preferensi persyaratan kata sandi, yang dapat Anda lakukan dengan program 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;
}

Dan kompilasi ini dengan:

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

Kemudian panggil program ini segera setelah panggilan Anda ke defaults write

Chris C
sumber
Pembaruan: pada High Sierra (10.13.6) ini mengkompilasi, tetapi melaporkan kesalahan ini: "ld: peringatan: file rintisan berbasis teks / System / Perpustakaan/Frameworks//CoreFoundation.framework/CoreFoundation.tbd dan file perpustakaan / Sistem / Perpustakaan /Frameworks//CoreFoundation.framework/CoreFoundation tidak sinkron. Kembali ke file perpustakaan untuk ditautkan. " Gagal dengan segmentasi saat dijalankan.
TJ Luoma