कमांड लाइन से स्क्रीनसेवर पासवर्ड की आवश्यकता को अक्षम करें


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
मैं सही था! प्लिस्ट फ़ाइल को बदलने के बाद लॉग आउट और फिर वापस परिलक्षित होने के लिए सेटिंग में परिवर्तन का कारण बनता है। इसलिए, ऐसा लगता है कि आपको यह खोजने की आवश्यकता है कि कौन सी सेवा 'पासवर्ड के लिए पूछें' व्यवहार को नियंत्रित कर रही है और प्लिस्ट को संशोधित करने के बाद इसे रीसेट / पुनः लोड करें।
मकाको

ऐसा लगता है जैसे Apple अपने ही तंत्र को कमजोर कर रहा है।
एंड्रयू जे। ब्रीडम

टा। मुझे उम्मीद है कि किसी को पता चल जाएगा और यहाँ जवाब देंगे।
एंड्रयू जे। Brehm

1
यह 'लॉगिनविंडो' प्रक्रिया है जो सिस्टम प्रेफरेंस द्वारा लिखे जाने के बाद इस फाइल को एक्सेस करने के लिए लगता है। जो समझ में आता है। दुर्भाग्य से, लॉगिनविंडो प्रक्रिया को मारना आपको जबरदस्ती लॉग आउट कर देगा। खोदते रहो!
मैकको

जवाबों:


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'

नोट: यदि कमांड को किसी स्क्रिप्ट के अंदर चलाया जा रहा है जिसे रूट विशेषाधिकार दिया गया है तो आपको sudo की आवश्यकता नहीं होगी ।

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

अच्छा! कमांड लाइन AppleScript अक्सर इस तरह की समस्या का एक अच्छा समाधान है।
डैनियल

@DanielLawson धन्यवाद, क्या आप वर्तमान में 10.7 पर काम कर रहे हैं? मैं आमतौर पर पोस्ट करना पसंद करता हूं कि ओएस के मैंने अपने आदेशों का परीक्षण किया है और दुर्भाग्य से आज सुबह मैं एक पुराने स्नो लेपर्ड मशीन के साथ फंस गया हूं और आज तक 10.7 मशीन तक पहुंच नहीं होगी। मैं 10.6.x पर कार्य करने के लिए घृणा करता हूं और 10.7 :( पर विफल रहता हूं, लेकिन फिर भी, मुझे पूरा यकीन है कि यह कार्य करेगा क्योंकि पौधे बहुत समान हैं। मुझे पता है कि 10.5 का स्क्रीनसेवर।प्लिस्ट अलग है और कुछ ट्विकिंग की आवश्यकता होगी। । किसी भी तरह, धन्यवाद फिर से
।: -व्यावसायिक

1
मैंने ओएस एक्स सर्वर पर 10.7.5 पर यह परीक्षण किया है और यह काम नहीं करता है। स्क्रीनसेवर को अभी भी एक पासवर्ड की आवश्यकता है और वरीयता अनियंत्रित नहीं है।

1
यह मेरे लिए 10.11 (एल कैपिटन) पर काम करता है। इसे इस धागे से मिला ( github.com/dustinrue/ControlPlane/issues/421 )
GTF

1
"ओसास्क्रिप्ट" पद्धति मेरे हाई सिएरा मैक पर काम नहीं करती है। ~ / लाइब्रेरी / वरीयताएँ / com.apple.screensaver.plist फ़ाइल मेरे हाई सिएरा मैक पर GUI स्विच से प्रभावित नहीं होती है।
कैंट

3

मैं एक समान मुद्दे में भाग गया, और इस मंच पोस्ट पर उपयोगकर्ता गिलाइम से एक समाधान मिला । मूल रूप से, आपको स्क्रीनसेवर को पासवर्ड की आवश्यकता को वरीयता देने के लिए मजबूर करने की आवश्यकता है, जिसे आप सी प्रोग्राम के साथ कर सकते हैं:

#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


अपडेट: हाई सिएरा (10.13.6) पर यह संकलन करता है, लेकिन इस त्रुटि की रिपोर्ट करता है: "ld: चेतावनी: पाठ-आधारित स्टब फ़ाइल / सिस्टम / नियम /Frameworks//CoreFoundation.framework/CoreForation.tbd और लाइब्रेरी फ़ाइल / सिस्टम / लाइब्रेरी /Frameworks//CoreFoundation.framework/CoreFoundation सिंक से बाहर हैं। लिंकिंग के लिए लाइब्रेरी फ़ाइल में वापस आ रहा है। " यह रन होने पर एक विभाजन दोष के साथ विफल रहता है।
टीजे लुओमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.