OSX:检查屏幕是否被锁定
有没有办法检查屏幕是否锁定在
shell或applescript中?
不只是检查屏幕保护程序是否正在运行,但屏幕是否被节能设置锁定或按^??(移位控制弹出). 先谢谢你.
首先,你的问题有点混乱. Shift控制弹出和节能器将屏幕放在睡眠中,这与锁定它们不同.根据您的其他设置,这也可能需要锁定屏幕,但这是一个单独的问题. IIRC,在狮子会上,默认情况下,任何一个都不会锁定屏幕 – 但是如果您将屏幕睡眠时间长于“安全与防护”中设??置的时间.隐私,这将锁定它.
无论如何,API 这是我知道的所有操作系统的唯一机制,从10.5(实际10.3)到10.8(但这并不意味着它是唯一的实际上是…). 没有直接的方法来从bash或AppleScript中调用它.但是,您可以使用自己喜欢的桥(PyObjC,MacRuby,ASOC等)间接调用它.以下是使用Python的示例: #!/usr/bin/python import Quartz d = Quartz.CGSessionCopyCurrentDictionary() print d 以下是解释响应的方法: >如果你没有回来,那么你没有一个UI会话. 一个问题的情况是kCGSSessionOnConsoleKey为0(或缺少),CGSSessionScreenIsLocked为1.在这种情况下,您已将屏幕置于睡眠状态并将其锁定,或者其他人已经占据了控制台并锁定了屏幕(有或没有让他们睡觉)我不知道有没有办法区分这些情况.但是,如果您正在寻找“不要尝试显示对话框,因为用户必须首先解锁屏幕”,这两种情况都意味着“不显示对话框”. 所以,这应该给你你想要的: #!/usr/bin/python import sys import Quartz d=Quartz.CGSessionCopyCurrentDictionary() sys.exit(d and d.get("CGSSessionScreenIsLocked",0) == 0 and d.get("kCGSSessionOnConsoleKey",0) == 1) 或者,将其转换为单行,您可以直接放在shell脚本中: python -c 'import sys,Quartz; d=Quartz.CGSessionCopyCurrentDictionary(); sys.exit(d and d.get("CGSSessionScreenIsLocked",0) == 0 and d.get("kCGSSessionOnConsoleKey",0) == 1)' 现在,如果你已经进入Mac了,而且你现在也登录到这个Mac的GUI控制台(同样的用户)呢?在这种情况下,您的ssh登录会话可以与本地终端登录会话完全相同的方式与控制台登录会话进行通信.所以,CGSessionCopyCurrentDictionary将获得相同的值. 中介该连接的引导服务器将应用一些限制(例如,安全性授权-u foo应该从终端工作,但不能通过ssh),但是没有完全记录,并且从版本更改为版本,所以这可能不是你要依靠.而是要实际读取您的登录会话信息 如果要进一步了解,请从Multiple User Environments Programming Topics开始阅读.但有些信息在任何地方都没有真正记录(例如,SessionGetInfo引用的Mach级会话和utpx引用的BSD级会话如何绑定在一起) .许多相关的工具和库是open source,这可能有所帮助.即使阅读所有这些都不会告诉你如何做你想要的,它会告诉你你想要什么,以及正确的术语用于搜索和提出问题,这可能是足够好的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 常用WebService一览表(一)
- 每日点滴之贰零零玖年捌月贰拾陆日
- angularjs – 如何只允许在输入中键入数字(数字和小数点)?
- angular-material – 在Angular Material中,如何使md-siden
- angular – 从服务触发组件视图的更新 – 没有ChangeDetect
- scala – 为什么Source.fromIterator需要将Function0 [Iter
- unix – 通过Makefile将目录添加到PATH
- 基于bootstrap页面渲染的问题解决方法
- bash – 用于文件名中循环和空格的gnuplot
- docker container systemd单元集成