Wyłącz wymaganie dotyczące hasła wygaszacza ekranu z wiersza polecenia

11

Próbuję włączyć i wyłączyć wymaganie dotyczące hasła wygaszacza ekranu z wiersza polecenia.

defaults read com.apple.screensaver

pokazuje zmienną askForPassword ustawioną na 0 lub 1, w zależności od tego, czy skonfigurowałem wymaganie hasła w Preferencjach systemowych, czy nie.

defaults write com.apple.screensaver askForPassword 1

i

defaults write com.apple.screensaver askForPassword 0

włączyć i wyłączyć ustawienie hasła, a przynajmniej tak myślałem.

Zamiast tego znajduję, że polecenia rzeczywiście zaznaczają i odznaczają pole wyboru w Preferencjach systemowych w obszarze Bezpieczeństwo, ale w ogóle nie wpływają na wygaszacz ekranu.

Jeśli włączę hasło w Preferencjach systemowych, a następnie wyłączę je za pomocą drugiego domyślnego polecenia zapisu, pole wyboru w Preferencjach systemowych nie jest zaznaczone, ale wygaszacz ekranu będzie nadal pytał o hasło. Tylko zaznaczenie i odznaczenie pola wyboru w Preferencjach systemowych może teraz zmienić to zachowanie.

A jeśli wyłączę hasło w Preferencjach systemowych, a następnie włączę je za pomocą pierwszego domyślnego polecenia zapisu, pole wyboru w Preferencjach systemowych zostanie zaznaczone, ale wygaszacz ekranu nie poprosi o hasło. Tylko odznaczenie i zaznaczenie pola wyboru w Preferencjach systemowych zmienia później zachowanie.

Co się dzieje?

Mogę sobie wyobrazić, że jest to ustawienie globalne i powinienem zmodyfikować /Library/Preferences/com.apple.screensaverzamiast domeny użytkownika. Ale w takim przypadku, dlaczego wpływa na pole wyboru Preferencje systemowe?

Andrew J. Brehm
źródło
To trochę oszałamiające. Obserwowałem odczyt / zapis pliku podczas przełączania ustawienia „zapytaj o hasło”. Jedyny plik, który widzę, że jest modyfikowany, to com.apple.screensaver. Zgaduję, że wiadomość jest wysyłana do jakiejś usługi, gdy ten przycisk jest przełączany w GUI, a także zapisuje do pliku plist. Założę się, że ponowne uruchomienie systemu lub wylogowanie / zalogowanie może spowodować ponowne odczytanie pliku przez tę usługę, dokonując żądanej zmiany.
macaco
1
Miałem rację! Wylogowanie, a następnie ponowne zalogowanie po zmianie pliku plist powoduje odzwierciedlenie zmiany ustawień. Wygląda na to, że musisz dowiedzieć się, która usługa kontroluje zachowanie „zapytaj o hasło” i zresetuj / załaduj ponownie po zmodyfikowaniu listy.
macaco
Wygląda na to, że Apple podważa ich własny mechanizm plist.
Andrew J. Brehm
Ta. Mam nadzieję, że ktoś to wie i odpowie tutaj.
Andrew J. Brehm
1
Jest to proces „loginwindow”, który wydaje się uzyskiwać dostęp do tego pliku po jego zapisaniu w Preferencjach systemowych. Co ma sens. Niestety, zabicie procesu loginwindow spowoduje wymuszone wylogowanie. Kop dalej!
macaco

Odpowiedzi:

7

Jeśli nie musisz używać ustawień domyślnych , możesz użyć następującego polecenia. Współdziała z systemem operacyjnym tak samo, jak w przypadku korzystania z Preferencji systemowych.

TESTOWANE NA:

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

UWAGA: Jeśli polecenie jest uruchamiane w skrypcie, który ma uprawnienia roota, sudo nie będzie potrzebne .

osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
E1Suave
źródło
Miły! Wiersz poleceń AppleScript jest często dobrym rozwiązaniem tego rodzaju problemu.
Daniel
@DanielLawson Dzięki, czy obecnie pracujesz nad wersją 10.7? Zasadniczo lubię publikować informacje o systemach operacyjnych, na których testowałem moje polecenia i niestety dziś rano utknąłem na starej maszynie z systemem Snow Leopard i nie będę mieć dostępu do maszyny z wersją 10.7 do dzisiaj. Nie chciałbym, aby działał w wersji 10.6.x i nie działał w wersji 10.7 :–( Jednak jestem pewien, że to zadziała, ponieważ listy odtwarzania są bardzo podobne. Wiem, że screenaver.plista w wersji 10.5 jest inny i trzeba by go trochę ulepszyć W każdym razie dzięki jeszcze raz. :–)
E1Suave
1
Przetestowałem to na 10.7.5 na OS X Server i to nie działa. Wygaszacz ekranu nadal wymaga hasła, a preferencja nie jest odznaczona.
1
Działa to dla mnie 10.11 (El Capitan). Znalazłem go z tego wątku ( github.com/dustinrue/ControlPlane/issues/421 )
GTF
1
Metoda „osascript” nie działa na moim High Sierra Mac. Wydaje się, że na plik ~ / Library / Preferences / com.apple.screensaver.plist nie ma wpływu przełącznik GUI na moim High Sierra Mac.
Kent
3

Natrafiłem na podobny problem i znalazłem rozwiązanie od użytkownika Guillaume na tym postu na forum . Zasadniczo musisz zmusić wygaszacz ekranu do ponownego odczytania preferencji dotyczącej hasła, co możesz zrobić za pomocą programu w 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;
}

I skompiluj to z:

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

Następnie wywołaj ten program natychmiast po wezwaniu do defaults write

Chris C.
źródło
Aktualizacja: w High Sierra (10.13.6) kompiluje się, ale zgłasza ten błąd: „ld: ostrzeżenie: tekstowy plik pośredniczący /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd i plik biblioteki / System / Biblioteka /Frameworks//CoreFoundation.framework/CoreFoundation nie są zsynchronizowane. Wracam do pliku biblioteki w celu połączenia. ” Nie działa z błędem segmentacji po uruchomieniu.
TJ Luoma,