ปิดใช้งานข้อกำหนดรหัสผ่านของโปรแกรมรักษาหน้าจอจากบรรทัดคำสั่ง


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 ฉันเดาว่ามีการส่งข้อความไปยังบริการบางอย่างเมื่อปุ่มนี้ถูกสลับใน GUI รวมถึงการเขียนลงในไฟล์ plist ฉันเดิมพันว่าการรีบูตระบบหรือออกจากระบบ / อาจทำให้ไฟล์ถูกอ่านซ้ำโดยบริการดังกล่าวทำให้การเปลี่ยนแปลงที่ต้องการ
macaco

1
ฉันถูก! การออกจากระบบและกลับมาอีกครั้งหลังจากเปลี่ยนไฟล์ plist ทำให้การเปลี่ยนแปลงการตั้งค่ามีผล ดังนั้นดูเหมือนว่าคุณต้องการค้นหาบริการที่ควบคุมพฤติกรรม 'ขอรหัสผ่าน' และรีเซ็ต / โหลดซ้ำหลังจากแก้ไข Plist
macaco

ดูเหมือนว่าแอปเปิ้ลจะทำลายกลไกการวางแผนของพวกเขาเอง
Andrew J. Brehm

ขอบคุณ ฉันหวังว่าบางคนจะรู้และตอบคำถามที่นี่
Andrew J. Brehm

1
เป็นกระบวนการ 'loginwindow' ที่ดูเหมือนว่าจะเข้าถึงไฟล์นี้หลังจากเขียนโดยการตั้งค่าระบบ ซึ่งทำให้รู้สึก แต่น่าเสียดายที่การฆ่ากระบวนการเข้าสู่ระบบจะบังคับให้คุณออกจากระบบ ขุดต่อไป!
macaco

คำตอบ:


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'

ดี! บรรทัดคำสั่ง AppleScript มักจะเป็นทางออกที่ดีสำหรับปัญหาประเภทนี้
Daniel

@DanielLawson ขอบคุณคุณกำลังทำงานกับ 10.7 อยู่หรือเปล่า? โดยทั่วไปฉันต้องการโพสต์สิ่งที่ระบบปฏิบัติการของฉันได้ทำการทดสอบคำสั่งของฉันและน่าเสียดายที่เช้านี้ฉันติดอยู่กับเครื่อง Snow Leopard ตัวเก่าและจะไม่สามารถเข้าถึงเครื่อง 10.7 ได้จนถึงวันนี้ ฉันเกลียดที่จะให้มันทำงานบน 10.6.x และล้มเหลวใน 10.7 :–( อย่างไรก็ตามฉันค่อนข้างแน่ใจว่านี่จะทำงานได้เมื่อ plists คล้ายกันมากฉันรู้ว่า 10.5 สกรีนเซฟเวอร์ของผู้เล่นคนอื่นนั้นแตกต่างกัน ขอบคุณอีกครั้ง:
E1Suave

1
ฉันได้ทดสอบสิ่งนี้ใน 10.7.5 บน OS X Server แล้วและมันไม่ทำงาน สกรีนเซฟเวอร์ยังคงต้องใช้รหัสผ่านและการตั้งค่าจะไม่ถูกตรวจสอบ

1
สิ่งนี้ใช้ได้กับฉันในวันที่ 10.11 (El Capitan) พบได้จากกระทู้นี้ ( github.com/dustinrue/ControlPlane/issues/421 )
GTF

1
วิธีการ "osascript" ไม่ทำงานบน High Sierra Mac ของฉัน ไฟล์ ~ / Library / Preferences / com.apple.screensaver.plist ไม่ได้รับผลกระทบจากสวิตช์ GUI บน High Sierra Mac ของฉัน
Kent

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: คำเตือน: ไฟล์ stub แบบข้อความ /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd และไฟล์ไลบรารี / ระบบ / ไลบรารี /Frameworks//CoreFoundation.framework/CoreFoundation ไม่มีการซิงค์กลับไปที่ไลบรารีไฟล์เพื่อเชื่อมโยง " มันล้มเหลวด้วยความผิดพลาดของการแบ่งส่วนเมื่อทำงาน
TJ Luoma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.