コマンドラインからスクリーンセーバーのパスワード要件を無効にする


11

コマンドラインからスクリーンセーバーのパスワード要件を有効または無効にしようとしています。

defaults read com.apple.screensaver

システム環境設定でパスワード要件を設定したかどうかに応じて、0か1に設定された変数askForPasswordを示します。

defaults write com.apple.screensaver askForPassword 1

そして

defaults write com.apple.screensaver askForPassword 0

パスワードの設定を有効または無効にするか、そう思った。

代わりに私が見つけたのは、コマンドがセキュリティの下のシステム環境設定のチェックボックスを実際にチェックおよびチェック解除しますが、スクリーンセーバーにはまったく影響しないということです。

システム環境設定でパスワードを有効にしてから、2番目のデフォルトの書き込みコマンドを使用してパスワードを無効にすると、システム環境設定のチェックボックスがオフになりますが、スクリーンセーバーはパスワードを要求します。この動作を変更できるのは、システム環境設定のチェックボックスをオンまたはオフにすることだけです。

また、システム環境設定でパスワードを無効にしてから、最初のデフォルトの書き込みコマンドを使用してパスワードを有効にすると、システム環境設定のチェックボックスがオンになりますが、スクリーンセーブはパスワードを要求しません。システム環境設定のチェックボックスのチェックを外してチェックするだけで、その後の動作が変わります。

どうしたの?

これはグローバル設定であり/Library/Preferences/com.apple.screensaver、ユーザードメインの代わりに変更する必要があると想像できます。しかしその場合、なぜシステム環境設定チェックボックスに影響があるのですか?


これは少し困惑します。「パスワードの確認」設定を切り替えながらファイルの読み取り/書き込みを監視しました。変更を確認できる唯一のファイルはcom.apple.screensaverです。GUIでこのボタンを切り替えると、plistファイルへの書き込みと同様に、メッセージがサービスに送信されると思います。システムを再起動したり、ログアウト/ログインしたりすると、ファイルが上記のサービスによって再度読み取られ、必要な変更が行われる場合があります。
macaco 2012年

1
私は正しかったです!ログアウトしてからplistファイルを変更した後に再度ログインすると、設定の変更が反映されます。したがって、「パスワードの確認」の動作を制御しているサービスを見つけて、plistを変更した後にリセット/再ロードする必要があるようです。
macaco

Appleが独自のplistメカニズムを弱体化しているように見えます。
Andrew J. Brehm

た。誰かがそれを知って、ここで答えてくれることを願っています。
アンドリューJ.ブレーム2012年

1
システム環境設定によって書き込まれた後、このファイルにアクセスするように見えるのは「loginwindow」プロセスです。それは理にかなっています。残念ながら、loginwindowプロセスを強制終了すると、強制的にログアウトされます。掘り続ける!
macaco

回答:


7

デフォルトの書き込みを使用する必要がない場合は、次のコマンドを使用できます。システム環境設定を使用する場合と同じように、OSと対話します。

テスト済み:

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

いいね!コマンドラインのAppleScriptは、この種の問題に対する優れたソリューションであることがよくあります。
ダニエル

@DanielLawsonありがとう、現在10.7に取り組んでいますか?私は通常、コマンドをテストしたOSを投稿しますが、残念ながら今朝は古いSnow Leopardマシンで立ち往生しており、今日まで10.7マシンにアクセスできません。10.6.xで機能して10.7で失敗するのは嫌です:-(ただし、plistは非常に似ているので、これは正しく機能します。10.5のscreensaver.plistは異なり、いくつかの調整が必要です。 。とにかく、もう一度感謝します:–)
E1Suave

1
OS Xサーバーの10.7.5でこれをテストしましたが、機能しません。スクリーンセーバーは依然としてパスワードを要求し、設定はチェックされていません。

1
これは10.11(El Capitan)では動作します。このスレッド(github.com/dustinrue/ControlPlane/issues/421)から見つけました
GTF

1
「osascript」メソッドは、私のHigh Sierra Macでは機能しません。〜/ Library / Preferences / com.apple.screensaver.plistファイルは、High Sierra MacのGUIスイッチの影響を受けないようです。
ケント

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:警告:テキストベースのスタブファイル/System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbdおよびライブラリファイル/ System / Library /Frameworks//CoreFoundation.framework/CoreFoundationは同期していません。リンクするためにライブラリファイルにフォールバックしています。」実行すると、セグメンテーション違反で失敗します。
TJ Luoma 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.