Отключить требование пароля заставки из командной строки

11

Я пытаюсь включить и отключить требование пароля заставки из командной строки.

defaults read com.apple.screensaver

показывает переменную askForPassword, установленную в 0 или 1, в зависимости от того, настроил ли я требование пароля в Системных настройках или нет.

defaults write com.apple.screensaver askForPassword 1

и

defaults write com.apple.screensaver askForPassword 0

включить и отключить настройку пароля, или так я думал.

Вместо этого я обнаружил, что команды действительно устанавливают и снимают флажок в Системных настройках в разделе «Безопасность», но не влияют на экранную заставку.

Если я включу пароль в «Системных настройках», а затем отключу его с помощью второй команды записи по умолчанию, флажок в «Системных настройках» снят, но заставка по-прежнему будет запрашивать пароль. Только установив и сняв флажок в Системных настройках, теперь можно изменить это поведение.

И если я отключу пароль в Системных настройках, а затем включу его с помощью первой команды записи по умолчанию, флажок в Системных настройках будет установлен, но экранная заставка не будет запрашивать пароль. Только снятие и проверка флажка в Системных настройках изменяет поведение впоследствии.

Что происходит?

Я могу представить, что это глобальная настройка, и я должен изменить /Library/Preferences/com.apple.screensaverвместо пользовательского домена. Но в таком случае, почему это влияет на флажок Системные настройки?

Эндрю Дж. Брем
источник
Это немного сбивает с толку. Я наблюдал за чтением / записью файлов, в то же время переключая настройку «запрашивать пароль». Единственный файл, который я вижу измененным, это com.apple.screensaver. Я предполагаю, что сообщение отправляется некоторому сервису, когда эта кнопка переключается в графическом интерфейсе, а также записывается в файл plist. Держу пари, что перезагрузка системы или выход из системы может привести к тому, что указанный сервис перечитает файл, внеся желаемое изменение.
Макако
1
Я был прав! Выход из системы и последующий вход после изменения plist-файла вызывает изменение настроек. Итак, похоже, что вам нужно найти, какая служба контролирует поведение запроса пароля, и сбросить / перезагрузить его после изменения plist.
Макако
Похоже, Apple подрывает собственный механизм plist.
Эндрю Дж. Брем
Ta. Я надеюсь, что кто-то узнает об этом и ответит здесь.
Эндрю Дж. Брем
1
Это процесс 'loginwindow', который, кажется, обращается к этому файлу после того, как он был написан Системными настройками. Что имеет смысл. К сожалению, уничтожение процесса loginwindow заставит вас выйти из системы. Продолжать копать!
Макако

Ответы:

7

Если вы не обязаны использовать настройки по умолчанию, вы можете использовать следующую команду. Он взаимодействует с ОС так же, как если бы вы использовали Системные настройки.

ИСПЫТАНО НА:

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

ПРИМЕЧАНИЕ. Если команда выполняется внутри скрипта, которому предоставлены привилегии root, вам не понадобится sudo .

osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
E1Suave
источник
Ницца! Командная строка AppleScript часто является хорошим решением для такого рода проблем.
Daniel
@DanielLawson Спасибо, вы сейчас работаете над 10.7? Как правило, мне нравится публиковать сообщения о том, на каких ОС я проверял свои команды, и, к сожалению, сегодня утром я застрял на старой машине Snow Leopard и не смогу получить доступ к машине 10.7 до сегодняшнего дня. Я не хотел бы, чтобы он функционировал на 10.6.x и не работал на 10.7 :–( Однако я вполне уверен, что это будет работать, так как списки очень похожи. Я знаю, что screensaver.plist 10.5 отличается, и потребуется некоторая настройка В любом случае, еще раз спасибо. :–)
E1Suave
1
Я проверил это на 10.7.5 на OS X Server, и он не работает. Заставка по-прежнему требует пароль, и предпочтение не снимается.
1
Это работает для меня 10.11 (Эль-Капитан). Нашел его по этой теме ( github.com/dustinrue/ControlPlane/issues/421 )
GTF
1
Метод osascript не работает на моем компьютере High Sierra Mac. Файл ~ / Library / Preferences / com.apple.screensaver.plist, по-видимому, не подвержен влиянию графического переключателя на моем компьютере High Sierra Mac.
Кент
3

Я столкнулся с подобной проблемой и нашел решение от пользователя Guillaume в этом сообщении на форуме . По сути, вам нужно заставить заставку перечитать настройку требования пароля, что вы можете сделать с программой на 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;
}

И скомпилируйте это с:

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

Затем позвоните в эту программу сразу после вашего звонка defaults write

Крис С
источник
Обновление: в High Sierra (10.13.6) компилируется, но сообщает об ошибке: «ld: warning: текстовый файл-заглушка /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd и файл библиотеки / System / Library /Frameworks//CoreFoundation.framework/CoreFoundation не синхронизированы. Возвращаемся к файлу библиотеки для ссылок. " Сбой при ошибке сегментации при запуске.
TJ Luoma