macos - 如何从 OS X 10.6 的终端检测屏幕是否已锁定或屏幕保护程序是否处于事件状态?

标签 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 上,您可以 grep ScreenSaverEngine 来确定它是否处于事件状态,但情况似乎不再如此。

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

最佳答案

有点困惑,但您可以通过 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
$

不过,您可能确实需要找出为什么会被锁定。

关于macos - 如何从 OS X 10.6 的终端检测屏幕是否已锁定或屏幕保护程序是否处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1390123/

相关文章:

cocoa - 如何制作核心数据对象图的精确副本?

linux - Bash - 如何使用 printf 打印多行字符串(带有 '\n' )

ruby - gem 可执行文件将不会运行

macos - 如何检查互联网连接 OSX

python - Tornado 在 OSX 上失败但在 Ubuntu 上工作

c++ - 使用 SDL2 指定 OpenGL 版本

iphone - MPMoviePlayerController:关键帧问题

Linux查找并替换: how to escape single quotes in strings?

macos - 在 AppleScript 中让显示器进入休眠状态(⇧⌃⏏/shift+control+eject)

objective-c - 将参数列表或数组从 Obj-C 传递到 Applescript