Фон не змінюється за допомогою gsettings з cron


11

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

Коли я запускаю скрипт із вікна терміналу, bg змінюється просто, але коли він запускається з cron, мені надсилається ця помилка:

(процес: 21901): dconf-ПОПЕРЕДЖЕННЯ **: не вдалося здійснити зміни в dconf: помилка нерестування командного рядка 'dbus-start --autolaunch = 00216c114dcf433c9bb9009985d607d6 - бінарний синтаксис --close-stderr': дочірній процес вийшов з кодом 1

Буду вдячний за будь-які пропозиції.


1
@Merri, окрім того, що відповіді там не вирішують проблему з ОП (що, до речі, не зробить це дурпом), як це було б дуп ???? Одна і та ж помилка не означає, що це те саме питання.
Яків Влійм

Відповіді:


16

Редагування геттингів із крона; відсутня змінна середовище

Якщо ви запускаєте скрипт із власного оточення (наприклад, з вікна терміналу або з програм запуску), буде встановлено ряд змінних середовища. 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 хвилин


@Shaun Вітаємо Вас! Радий, що це працює :)
Яків Влійм

1
Я пробую це з Корицею на монетному дворі. Коли я запускаю це з кліпу безпосередньо, я отримую "dconf-УВАГА *: не вдалося здійснити зміни в dconf: Дана адреса порожня". Раніше він працював раніше (з cli), без PID та DBUS_SESSION_ . (Але не від cron)
donquixote

1
@donquixote Спробуйте PID=$(pgrep -f 'gnome-session' | head -n1)!
Яніс Елмеріс

Ви можете замінити DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)на $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Так, як grep також отримує ім'я змінної. джерело
wjandrea

1
pgrep gnome-sessionможе повернути більше ніж один pid, якщо в систему увійшли кілька користувачів (кожен запущений сеанс gnome). Може бути , EUID=$(id --real --user)і PID=$(pgrep --euid $EUID gnome-session)був би спосіб отримати тільки PID , пов'язаний з гномом сесії поточного користувача.
unutbu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.