На этом компьютере есть два ПОЛЬЗОВАТЕЛЯ: jdl и эксперимент
Настройка CRONTAB (для эксперимента (выполняется каждую минуту):
USER=experiment
HOME=/home/experiment
SHELL=/bin/bash
PATH=/home/experiment/bin:/home/experiment/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
XAUTHORITY=/home/experiment/.Xauthority
DISPLAY=:0
*/1 * * * * /home/experiment/monitor
Из командной строки запуск сценария (монитора) с: (дает Inactive)
if (gnome-screensaver-command -q | grep "is inactive"); then
# Inactive screensaver
echo "screensaver: Inactive">>log_log.txt
elif (gnome-screensaver-command -q | grep "is active"); then
# Active screensaver
echo "screensaver: Active">>log_log.txt
else
# N/A active screensaver
echo "screensaver: N/A">>log_log.txt
fi
Но из CRONTAB (запускает сценарий: monitor) ... запуск того же сценария: (дает N / A), поскольку область действия не относится к конкретному пользователю
Как получить статус заставки для определенного пользователя при запуске сценария из CRONTAB?
РЕШЕНО:
Использование Notify-send не работает из crontab
НЕОБХОДИМО УСТАНОВИТЬ DBUS:
Использование pid первых результатов сеанса gnome для поиска DBUS_SESSION_BUS_ADDRESS :
source /home/experiment/.bashrc
pid=$(pgrep -u experiment gnome-session | head -n 1)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//' )
export DBUS_SESSION_BUS_ADDRESS=$dbus
export HOME=/home/experiment
export DISPLAY=:0
export USER=experiment
if (gnome-screensaver-command -q | grep "is active"); then
echo $(date) :::: $USER :::: Active>> $HOME/crondate.txt
uu="user: $USER date: $(date) screensaver: ACTIVE"
elif (gnome-screensaver-command -q | grep "is inactive"); then
echo $(date) :::: $USER :::: InActive>> $HOME/crondate.txt
uu="user: $USER date: $(date) screensaver: INACTIVE"
else
echo $(date) :::: $USER :::: N/A>> $HOME/crondate.txt
uu="user: $USER date: $(date) screensaver: N/A"
fi