Как определить, активен ли скринсейвер в другом сеансе

Как определить, активен ли скринсейвер в другом сеансе

Вы можете определить, активна ли заставка пользователя, с помощью:

gnome-screensaver-command -q

Я пытаюсь создать демона для выполнения действий, когда пользователь неактивен, но я обнаружил, что эта команда всегда возвращает false, если не запущена из сеанса пользователя. Например, все эти варианты сообщают, что заставка неактивна, даже если она активна:

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

Почему это происходит, и как мне проверить статус экрана пользователя из-под другого пользователя, например root?

решение1

Я знаю, что уже немного поздно, но, возможно, другие люди смогут прочитать ответ сейчас.

Проблема с dbus. Вам нужно экспортировать правильную переменную перед запуском gnome-screensaver-command.

Сначала вам нужно узнать uid пользователя. Я также экспортировал 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

Связанный контент