您可以通过以下方式检测用户的屏幕保护程序是否处于活动状态:
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