我正在尝试使用X11屏幕保护程序扩展客户端库检测自上次用户输入以来的时间。我定期拨打XScreenSaverQueryInfo
来获取空闲时间。我面临的问题是,每隔20-30秒,此调用所报告的空闲时间将重置为0.即使在此时间内没有实际的用户输入,也会发生这种情况。我完全对此感到困惑。我唯一的领先是,如果我卸载gnome-screensaver
,问题就会消失。我的问题是,gnome-screensaver
出于某种原因模拟用户输入吗?我知道这听起来不太可能,如果确实如此,它绝对会成为gnome-screensaver
的错误,但我现在想不出任何其他问题。有谁知道我可以在哪里找到有关gnome-screensaver
如何工作的更多信息以及它如何影响XScreenSaverQueryInfo
调用而无需实际执行代码。我在gnome-screensaver
home处查看了相关信息,但找不到与我的问题相关的任何信息。
更新:我从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询问SimulateUserActivity。或者,gnome-screensaver向dbus发送SimulateUserActivity信号?如果是第一个,我怎样才能找出哪个进程要求gnome-screensaver这样做?
答案 0 :(得分: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
是了解该计划的一种方式。
答案 1 :(得分:1)
一个程序(视频播放器在播放视频时执行此操作)可能正在发送gnome-screensaver-command --poke
命令,该命令将发送SimulateUserActivity
事件以重置空闲时间,这将阻止屏幕保护程序变为活动状态。