如何确定屏幕保护程序在另一个会话中是否处于活动状态

如何确定屏幕保护程序在另一个会话中是否处于活动状态

您可以通过以下方式检测用户的屏幕保护程序是否处于活动状态:

gnome-screensaver-command -q

我正在尝试创建一个守护进程来在用户不活动时执行操作,但我发现此命令在不从用户会话内部运行时始终返回 false。例如,这些变体都报告屏幕保护程序处于非活动状态,即使它处于活动状态:

sudo gnome-screensaver-command -q
sudo -u myuser gnome-screensaver-command -q

为什么会这样?如何从不同用户(例如 root)检查用户屏幕的状态?

答案1

我知道现在有点晚了,但也许其他人现在可以阅读答案。

问题出在 dbus 上。您需要在运行之前导出正确的变量gnome-screensaver-command

首先你需要知道用户的uid。我还导出了DISPLAY用户的。您可以使用命令获取其值w

sudo -u myuser DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID_OF_MYUSER/bus DISPLAY=:0 gnome-screensaver-command --query

这适用于 Debian 9 和gnome-screensaver-command 3.6.1

相关内容