AppleScript - 在家时更改prefs

时间:2012-05-17 01:23:37

标签: applescript

好吧,伙计们,所以当我在家时,我设置了一个脚本来关闭“唤醒时需要密码”功能。它ping我的手机,看我是否连接到网络,如果没有打开锁定唤醒。所以:

try
do shell script "ping -c2 X.X.X.X"
set theResult to the result
if theResult contains " 2 packets received," then
    tell application "System Events"
        tell security preferences
            get properties
            set properties to {require password to wake:false, require password to unlock:false}
        end tell
    end tell
end if
on error
tell application "System Events"
    tell security preferences
        get properties
        set properties to {require password to wake:true, require password to unlock:true}
    end tell
end tell
end try
end

这很好用,但要求验证。我真的不想使用输入文字&返回路由,也不是剪贴板路由,因为我不想在脚本中输入密码...那么有没有办法避免身份验证?

2 个答案:

答案 0 :(得分:3)

如果您的目标是启用/禁用“唤醒时密码”而不是在未经身份验证的情况下运行该特定脚本,请使用

tell application "System Events"
    set require password to wake of security preferences to true
end tell

do shell script "defaults write com.apple.screensaver -int 1"

与“to false”和“-int 0”相同以关闭设置。这些都不需要身份验证,因为它们只是更改用户级首选项(存储在

中)
~/Library/Preferences/com.apple.screensaver.plist

在我的系统上,虽然这是一个你不应该依赖的实现细节。)

在脚本中触发身份验证对话框的是另一个属性“需要密码才能解锁”,相当于“安全首选项”的“高级...”部分中的“需要管理员密码才能访问锁定首选项”选项。在幕后,选项相当于更改Authorization Services数据库中的许多设置,

/private/etc/authorization

控制是否可以为未经身份验证的更改解锁各种系统范围的偏好设置。

系统事件似乎确实存在(不太严重)的错误,但是:在我的系统上,设置“要求解密密码”无效,无论我是否以管理员身份进行身份验证。

答案 1 :(得分:1)

这个答案有两个部分:

  1. 无法通过脚本或GUI脚本将密码传递给负责提示(即设计)的SecurityAgent应用程序,也无法完全取消密码;这就是说,
  2. 您可以忽略提示并在不输入密码的情况下关闭窗口 - 即使在这种情况下也会应用您的属性设置(在OS X 10.7.4上测试)。
  3. rdar://11484075

    向Apple报告为安全问题

    更新:Apple Product Security不认为这是一个安全问题,但仍然会跟踪错误本身(我必须​​猜测,因为它被关闭为另一个雷达的副本,这在Openradar上不可用,但我希望虚假的对话似乎是苹果公司关注的问题。)