AppleScript-主页时更改优先级

AppleScript-主页时更改优先级,applescript,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 secur

好了,伙计们,我已经设置了一个脚本,当我在家时关闭“唤醒时需要密码”功能。它会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

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

这个答案有两个部分:

  • 无法通过脚本或GUI脚本将密码传递给负责提示的SecurityAgent应用程序(这是出于设计),也无法完全抑制密码;话虽如此,
  • 您可以忽略提示并在不输入密码的情况下关闭窗口–即使在这种情况下也会应用您的属性设置(在OS X 10.7.4上测试)
  • 作为安全问题报告给苹果公司


    Update:苹果产品安全不认为这是一个安全问题,但bug本身仍然被跟踪(我必须猜测,因为它是另一个雷达的副本,它在OpenRADAR上不可用,但是我希望假对话看起来是苹果公司关注的问题)。p> 如果您的目标是启用/禁用“唤醒密码”,而不是在没有身份验证的情况下运行特定脚本,请使用

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

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

    ~/Library/Preferences/com.apple.screensaver.plist
    
    在我的系统上,虽然这是一个不应该依赖的实现细节)

    在脚本中触发身份验证对话框的是另一个属性“require password to unlock”,相当于安全首选项的“Advanced…”部分中的“require administrator password to access locked preferences”选项。在引擎盖下,此选项相当于更改授权服务数据库中的许多设置

    /private/etc/authorization
    
    控制是否可以为未经验证的更改解锁各种系统范围的首选项


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

    您可以将密码存储在Keychain中吗?哪个框架执行此脚本?能否将此脚本文件设置为setuid root并以提升的权限执行?还是这个脚本文件完全由周围的框架解释?@robert已经尝试过keychain。“那是不可能的。”萨诺尔德我相信它依赖于苹果的碳框架。但我甚至没想过提升特权!我现在要试一试,虽然我在mac上,所以没有setuid。哦,太好了!这很有效。现在还可以,但我会继续寻找一个更持久的解决方案,如果我找到了,我会发布它!谢谢这是我一直在寻找的更持久的解决方案。非常感谢你。
    /private/etc/authorization