3

好的,所以我设置了一个脚本来在我在家时关闭“唤醒时需要密码”功能。它会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

这工作得很好,但是它要求进行身份验证。我真的不想使用输入文本和返回路线,也不想使用剪贴板路线,因为我不想要脚本中的密码......那么有没有办法避免身份验证?

4

2 回答 2

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

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

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

/private/etc/authorization

控制是否可以为未经身份验证的更改解锁各种系统范围的首选项。

系统事件似乎确实有一个(不太严重的)错误,但是:在我的系统上,设置“需要密码才能解锁”没有任何效果,无论我是否以管理员身份进行身份验证。

于 2012-07-04T16:22:58.387 回答
1

这个答案有两个部分:

  1. 无法通过脚本或 GUI 脚本将密码传递给负责提示的 SecurityAgent 应用程序(即设计使然),您也不能完全禁止它;话虽如此,
  2. 您可以忽略提示并在不输入密码的情况下关闭窗口 - 即使在这种情况下也会应用您的属性设置(在 OS X 10.7.4 上测试)。

作为安全问题向 Apple 报告为rdar://11484075

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

于 2012-05-18T16:45:58.773 回答