![Redhat 6.6 上如何在屏幕保护程序处于活动状态时检测屏幕是否被锁定?](https://linux22.com/image/70533/Redhat%206.6%20%E4%B8%8A%E5%A6%82%E4%BD%95%E5%9C%A8%E5%B1%8F%E5%B9%95%E4%BF%9D%E6%8A%A4%E7%A8%8B%E5%BA%8F%E5%A4%84%E4%BA%8E%E6%B4%BB%E5%8A%A8%E7%8A%B6%E6%80%81%E6%97%B6%E6%A3%80%E6%B5%8B%E5%B1%8F%E5%B9%95%E6%98%AF%E5%90%A6%E8%A2%AB%E9%94%81%E5%AE%9A%EF%BC%9F.png)
有两个屏幕保护选项红帽6.6菜单“系统->首选项->屏幕保护程序”:
- “计算机空闲时激活屏幕保护程序”选项。勾选此选项将导致当空闲时间达到限制时屏幕保护程序被激活;
- “屏幕保护程序处于活动状态时锁定屏幕”选项。勾选此选项将导致屏幕保护程序激活时屏幕锁定;否则,当屏幕保护程序处于活动状态时,屏幕将不会锁定。
我的问题是,如果选中选项(1),如何监控屏幕锁定/解锁?我尝试使用 dbus 命令:
dbus-monitor --session "interface='org.gnome.ScreenSaver'"
不幸的是,结果不正确,因为它只捕获消息“ActiveChanged”,即使我选中选项(2)并且屏幕实际上已锁定。
signal sender=:1.37 -> dest=(null destination) serial=25 path=/org/gnome/ScreenSaver;
interface=org.gnome.ScreenSaver; member=ActiveChanged
布尔值 true
如果我gnome-screensaver-command -l
手动运行该命令,dbus-monitor 可以捕获以下消息:
method call sender=:1.99 -> dest=org.gnome.ScreenSaver serial=3 path=/org/gnome/ScreenSaver;
interface=org.gnome.ScreenSaver; member=Lock
signal sender=:1.37 -> dest=(null destination) serial=23 path=/org/gnome/ScreenSaver;
interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
我参考了org.gnome.ScreenSaver的文档:
https://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html
看来方法调用“Lock”的意思是“请求锁定屏幕”。
信号“ActiveChanged”仅表示屏幕保护程序是否处于活动状态。
所以我怀疑这是一个红帽6.6bug:
当屏幕保护程序处于活动状态并且通过上述两个选项锁定屏幕时,会错过“锁定”消息。
这导致我无法检测到在这种情况下屏幕是否锁定。
对于这个问题有任何解决方案吗?我是否可以读取存储上述两个选项的配置文件?
谢谢。
答案1
运行gconftool-2 --get /apps/gnome-screensaver/lock_enabled
将返回一个布尔值,告诉您当前用户是否启用了屏幕锁定。如果是true
,您就会知道当“ActiveChanged”信号为真时,屏幕也被锁定。
由于您询问了这两个选项的配置文件,您还可以检查屏幕保护程序是否设置为使用gconftool-2 --get /apps/gnome-screensaver/idle_activation_enabled
.