Фон не меняется при помощи gsettings из cron

Я пытаюсь изменить обои на случайное изображение, используя предложенный Индраджитом сценарий Индрапрастама: как изменить фон рабочего стола из командной строки в Unity?

Когда я запускаю скрипт из окна терминала, bg меняется очень хорошо, но когда он запускается из cron, я получаю эту ошибку по почте:

(процесс:21901): dconf-WARNING **: не удалось зафиксировать изменения в dconf: ошибка создания командной строки 'dbus-launch --autolaunch=00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr': дочерний процесс завершен с кодом 1

Буду признателен за любые предложения.

2 ответа

Решение

Редактирование настроек из cron; отсутствует переменная окружения

Если вы запускаете сценарий из собственной среды (например, из окна терминала или из автозагрузки), будет задан ряд переменных среды. cron однако ваш скрипт запускается с ограниченным набором переменных среды.

Редактировать gsettings успешно из cronнужно установить DBUS_SESSION_BUS_ADDRESS переменная окружения. Вы можете сделать это, добавив две строки в ваш скрипт, как описано здесь (и ниже).

Ваш скрипт, в том числе установка необходимой переменной

Сценарий отсюда, отредактированный, чтобы включить DBUS_SESSION_BUS_ADDRESS переменная окружения, затем становится:

#!/bin/bash

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

Связанный: Запуск.sh каждые 5 минут

Ответ от @jacob-vlijm не сработал для меня из-за нескольких проблем со сценарием оболочки ($(id --real --user)команда возвращала более одной строки, аgrep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-в команде была ошибка нулевого байта).

Вот тот, который работает без проблем (по крайней мере, для меня):

      #!/bin/bash

REAL_UID=$(id --real --user)
PID=$(pgrep --euid $REAL_UID gnome-session | head -n 1)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2- | sed -e "s/\x0//g")

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"
Другие вопросы по тегам