Вимкнути вимогу пароля заставки з командного рядка


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. Я здогадуюсь, що повідомлення надсилається якійсь службі, коли цю кнопку перемикають у графічному інтерфейсі, а також записують у файл плісту. Я б загрожував, що перезавантаження системи або вихід / вхід може призвести до того, що файл буде перечитаний вказаною службою, внесення потрібних змін.
макако

1
Я був правий! Вихід із системи, а потім повернення після зміни файлу plist призводить до відображення змін у налаштуваннях. Отже, виглядає, що вам потрібно знайти, яка служба керує поведінкою "запитувати пароль", і скинути / перезавантажити її після зміни списку.
макако

Схоже, Apple підриває власний механізм плістів.
Ендрю Дж. Брем

Та. Сподіваюся, хтось це дізнається і відповість тут.
Ендрю Дж. Брем

1
Це, здається, доступ до цього файлу після "написання налаштуваннями системи". Що має сенс. На жаль, вбивство процесу входу в систему змусить вас вийти з системи. Продовжуйте копати!
макако

Відповіді:


7

Якщо ви не змушені користуватися типовими записами за замовчуванням, ви можете скористатися наступною командою. Він взаємодіє з ОС так само, як якщо б ви використовували Системні налаштування.

ТЕСТОВАНО:

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

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

ПРИМІТКА: Якщо команда виконується всередині скрипту, якому надані кореневі привілеї, вам не знадобиться sudo .

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

Приємно! Командний рядок AppleScript часто є хорошим рішенням подібної проблеми.
Даниїл

@DanielLawson Спасибі, ви зараз працюєте на 10,7? Я, як правило, люблю публікувати, на яких операційних системах я перевірив свої команди, і, на жаль, сьогодні вранці я застряг зі старою машиною Snow Leopard і не отримаю доступу до машини 10.7 до сьогоднішнього дня. Мені б не хотілося, щоб він функціонував на 10.6.x, а не на 10.7: --( Однак я впевнений, що це буде функціонувати, оскільки плісти дуже схожі. Я знаю, що screensaver.plist 10.5 відрізняється, і потрібне певне налаштування. Як
завгодно

1
Я протестував це 10.7.5 на OS X Server, і це не працює. Заставка все ще потребує пароля, і налаштування не знімається.

1
Це працює для мене 10.11 (El Capitan). Знайшов його з цієї теми ( github.com/dustinrue/ControlPlane/isissue/421 )
GTF

1
Метод "osascript" не працює на моєму високому Maer Sierra. Файл ~ / Library / Preferences / com.apple.screensaver.plist не впливає на перемикач GUI на моєму високому Sierra Mac.
Кент

3

Я зіткнувся з подібною проблемою і знайшов рішення від користувача Гійом у цьому пості на форумі . В основному, вам потрібно змусити заставку перечитати перевагу вимог до пароля, що можна зробити з програмою 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: попередження: текстовий файл заглушки /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd та файл бібліотеки / Система / Бібліотека /Frameworks//CoreFoundation.framework/CoreFoundation не синхронізовані. Повернення до файлу бібліотеки для посилання. " Він не працює з помилкою сегментації при запуску.
TJ Luoma
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.