Фон не меняется при помощи 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"