1

我正在尝试使用 X11 屏幕保护程序扩展客户端库检测自上次用户输入以来的时间。我定期打电话来XScreenSaverQueryInfo获取空闲时间。我面临的问题是,每隔 20-30 秒,此调用报告的空闲时间重置为 0。即使当时没有实际的用户输入,也会发生这种情况。我对此完全感到困惑。我唯一的线索是,如果我卸载,问题就会消失gnome-screensaver。我的问题是,是否gnome-screensaver出于某种原因模拟用户输入?我知道这听起来不太可能,如果确实如此,那肯定是gnome-screensaver. 有谁知道我在哪里可以找到有关其gnome-screensaver工作原理以及它如何影响的更多信息XScreenSaverQueryInfo无需实际通过代码即可调用。我已经在gnome-screensaver 家里浏览了信息,但找不到与我的问题相关的任何内容。

更新:我从 dbus-monitor 得到以下输出。我如何解释这个:

method call sender=:1.97538 -> dest=org.gnome.ScreenSaver serial=3 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=SimulateUserActivity

我认为某些过程要求 gnome-screensaver 模拟用户活动。或者,gnome-screensaver 是否向 dbus 发送 SimulateUserActivity 信号?如果是第一个,我怎样才能找出哪个进程要求 gnome-screensaver 这样做?

4

2 回答 2

3

一个程序(视频播放器在播放视频时执行此操作)可能正在发送一个gnome-screensaver-command --poke命令,该命令将发送一个SimulateUserActivity事件来重置空闲时间,这将阻止屏幕保护程序激活。

于 2011-01-18T08:58:34.040 回答
2

一旦你有了 dbus 发送者(如那里的 dbus-monitor 所示),你可以这样做:

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetConnectionUnixProcessID string:':1.97538'

插入实际的发件人。这为您提供了发送消息的 pid。

然后说pid是2144,你会这样做:

cat /proc/2144/cmdline

作为查看程序是什么的一种方式。

于 2011-01-18T16:32:53.287 回答