我正在尝试编写一个 applescript,将一些操作发送到应用程序(特别是 waterroof)。问题是,当我打开我感兴趣的设置面板时,应用程序会定期询问我管理员密码。它以时间延迟的方式工作,因此如果我在之前的 x 分钟内已经输入了密码,它不会提示。因为我不能依赖被询问,所以我不能将暂停和输入密码视为脚本的一部分。
有没有办法告诉应用程序/操作系统我想以管理员权限保持登录状态,并且它不应该询问我?我想在尝试在代码中检查它是否存在之前穷尽这种可能性。
答案1
据我所知,OS X 中的授权超时(如果操作正确)设置在策略数据库位于etc/authorization
,通常以编程方式。它看起来像一个 plist 文件,如果某项没有“超时”键,则它没有超时。
我确实知道偏好设置通常是使用 Apple 的 API 在代码中设置的(如 Apple 的授权服务编程指南和功能参考)。
这是一个受保护的文件。使用类似命令sudo pico /private/etc/authorization
来编辑它。
此文件中的条目将有一个标题,使用一种描述符“com.company.application.right”或类似的描述符(例如 com.apple.itunes.copy、com.stackexchange.superuser.deleteuser) - 每个应用程序都有其特定名称,因此请查找该名称。(我认为,它是按字母顺序排列的,这样更容易查找)。
如果没有这样的条目,那么应用程序可能以我不知道的另一种方式获取授权。我刚刚尝试向我编写的应用程序添加超时 - 它成功了。然后我再次删除它 - 超时消失了。我猜它应该适用于你的情况。
您确实提到了设置面板 - 如果这涉及系统偏好设置,那么我也不知道它是如何工作的。没有办法通过 applescript 来实现。
编辑:如果没有这样的条目
应用程序授权的另一种方式是使用现已弃用且不安全的方法AuthorizationExecuteWithPrivileges
。我猜想,如果应用程序在策略数据库中没有自己的条目,它会使用AuthorizationExecuteWithPrivileges
。您尝试使用的应用程序可能使用此方法。
策略数据库中有一个名为 的特定方法的条目system.privilege.admin
,但请注意,修改此条目并删除超时可能会更改使用 的所有应用程序的超时AuthorizationExecuteWithPrivileges
,而不仅仅是您要更改的应用程序的超时。也许值得一试。