2

由于 OS X 10.6 中 Kerberos 的新限制,我正在开发一个脚本,该脚本提供与 10.5 中过去可用的功能类似的功能。本质上,它会解析 klist 输出以查看您的票证是否到期,并显示到期时间。如果我们达到 10 分钟的标记,它会调用 kinit 来执行 GUI 密码提示以询问您的 kerberos 密码。如果票已过期,它会执行相同的操作。

该脚本确保 kinit 在再次调用之前没有运行,因此我们没有多次 kinit 调用,并且该脚本工作得非常好(从 GeekLog 中调用,以便您可以查看状态)。问题是今天早上我去解锁屏幕时我的系统正在给旋转的沙滩球。我怀疑我的脚本和/或 kinit 做某事;该机器可通过 ping 访问,但对 ssh 或 AFP 无响应。

所以我想要做的是检测屏幕是否被锁定或屏幕保护程序是否被启用。我发现在以前版本的 OS X 上,您可以使用 grep for ScreenSaverEngine 来确定它是否处于活动状态,但似乎不再是这种情况了。

那么如何使用命令行工具确定屏幕是否被锁定或以其他方式使用?如果屏幕被锁定,我希望脚本简单地退出,这样它就不会打扰 klist 或尝试执行 kinit。我希望这能防止我今天早上经历的锁定。有任何想法吗?

4

2 回答 2

4

有点麻烦,但您可以System Events通过 Apple 事件轻松查询后台应用程序,以判断屏幕保护程序是否正在运行。例如:

$ osascript -e 'tell application "System Events"' \
>  -e 'get running of screen saver preferences' \
>  -e 'end tell'
false
$ # engage screen saver after starting next command
$ sleep 5; osascript -e 'tell application "System Events"'  -e 'get running of screen saver preferences'  -e 'end tell'
true
$

不过,您可能真的需要找出锁定的原因。

于 2009-09-07T22:22:44.740 回答
0

只是出于好奇,您是否尝试过 ssh 进入 OS X 机器并比较屏幕保护程序/锁定之前/之后的进程列表?

这就是我要尝试的。

于 2009-09-07T17:24:25.513 回答