如何从OS X 10.6中的终端检测屏幕是否被锁定或屏幕保护程序是否处于活动状态?

时间:2009-09-07 16:34:34

标签: macos shell applescript kerberos screensaver

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

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

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

那么如何使用命令行工具确定屏幕是否被锁定或以其他方式使用?如果屏幕被锁定,我希望脚本只是退出,这样它就不会打扰klist或尝试做一个kinit。我希望这能阻止我今天早上遇到的锁定。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

$ 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
$

你可能真的需要找出你为何获得锁定的原因。

答案 1 :(得分:0)

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

这就是我要尝试的。