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

Macos 在OS X 10.6中,如何从终端检测屏幕是否已锁定或屏幕保护程序处于活动状态?,macos,shell,applescript,kerberos,screensaver,Macos,Shell,Applescript,Kerberos,Screensaver,由于OS X 10.6中Kerberos的新限制,我正在编写一个脚本,该脚本提供与10.5中提供的功能类似的功能。本质上,它解析klist输出以查看您的票证是否过期,并显示其过期的时间。如果我们达到10分钟,它会调用kinit来执行GUI密码提示,以询问您的kerberos密码。如果票过期了,它也会做同样的事情 该脚本确保kinit在再次调用之前没有运行,因此我们没有多个kinit调用,并且该脚本工作得非常好(从GeekLog中调用,以便您可以查看状态)。问题是今天早上,当我去解锁屏幕时,我的系

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

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

所以我想做的是检测屏幕是否被锁定或者屏幕保护程序是否被占用。我发现,在以前版本的OS X上,您可以通过grep查看ScreenSaverEngine来确定它是否处于活动状态,但现在似乎不再是这样了


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

只是出于好奇,你有没有尝试过ssh'ing到OSX机器中,并比较屏幕保护程序/锁之前/之后的进程列表


这就是我要尝试的

有点麻烦,但您可以通过Apple 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
$

不过,你可能真的需要弄清楚为什么你会被锁定。

是的,我试过使用ps ax | awk{print$5,$6}(这样pid和运行时间之类的东西不会使差异抛出误报),而且绝对没有变化。因此,有一个正在运行的进程可以处理这个问题(不像以前版本的屏幕保护引擎在屏幕锁定时显示)。是的,我希望我知道是什么导致了挂起。最后,我制作了一个Automator工作流应用程序,在收到“是”后调用kinit并锁定系统之前,它会做一个“是/否”提示(屏幕被锁定时会执行该提示)。这很有效。。。但我想只有在屏幕保护程序运行的情况下。它不工作,如果屏幕被锁定(没有屏幕保护程序),这是我的问题。在锁定的屏幕上进行kinit操作并在凌晨2点到期(显示器处于休眠状态),仍然会导致挂起=(这是否包括电台被锁定?就像
运行屏幕保护程序首选项
在电台被锁定时返回true一样?@Noitidart,你可以自己试试看。如果你的意思是使用需要密码的屏幕保护程序,它似乎可以工作(在OS X Yosemite上试用过)。非常感谢您的测试。我自己测试了它,它在屏幕保护程序启动时工作。但是锁定时没有区别。我已将脚本设置为每5秒记录一次。我的屏幕保护程序在1分钟后启动,在这一点上变为真。我在1分钟后设置为锁定,然后工作站锁定,它仍然是真的。移动鼠标后现在在锁定屏幕上,它仍然是正确的。:(关于如何通过脚本检测是否锁定有什么想法?:(你可能应该就此提出一个新问题。可能有人知道。