Tło nie zmienia się przy użyciu ustawień z crona

11

Próbuję zmienić tapetę na losowy obraz za pomocą sugerowanego skryptu Indrajith Indraprastham tutaj: Jak zmienić tło pulpitu z wiersza poleceń w Unity?

Kiedy uruchamiam skrypt z okna terminala, bg zmienia się dobrze, ale kiedy jest uruchamiany z crona, wysyłam ten błąd:

(proces: 21901): dconf-WARNING **: nie udało się zatwierdzić zmian w dconf: Błąd spawnowania wiersza poleceń „dbus-launch --autolaunch = 00216c114dcf433c9bb9009985d607d6 - składnia binarna --close-stderr”: Proces potomny został zakończony z kodem 1

Byłbym wdzięczny za wszelkie sugestie.

Shaun
źródło
1
@Merri poza faktem, że odpowiedzi tam nie rozwiązują problemu OP (co nie uczyniłoby go dupesem), Jak by to był dupek ???? Ten sam błąd nie oznacza, że ​​to samo pytanie.
Jacob Vlijm,

Odpowiedzi:

16

Edycja ustawień z crona; brak zmiennej środowiskowej

Jeśli uruchomisz skrypt ze swojego środowiska (np. Z okna terminala lub z aplikacji startowych), zostanie ustawiona liczba zmiennych środowiskowych. cronjednak uruchamia skrypt z ograniczonym zestawem zmiennych środowiskowych.

Aby edytować gsettingsz powodzeniem cron, musisz ustawić DBUS_SESSION_BUS_ADDRESSzmienną środowiskową. Możesz to zrobić, dodając dwa wiersze do skryptu, jak opisano tutaj (i poniżej).

Twój skrypt, w tym ustawienie potrzebnej zmiennej

Skrypt z tego miejsca , edytowany w celu włączenia DBUS_SESSION_BUS_ADDRESSzmiennej środowiskowej, staje się:

#!/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"

Powiązane: Uruchamianie .sh co 5 minut

Jacob Vlijm
źródło
@Shaun Nie ma za co! Cieszę się, że to działa :)
Jacob Vlijm,
1
Próbuję tego z Cynamonem na Mennicy. Kiedy uruchamiam to bezpośrednio z cli, pojawia się komunikat „dconf-WARNING *: nie udało się zatwierdzić zmian w dconf: podany adres jest pusty”. Kiedyś działał wcześniej (z cli), bez PID i DBUS_SESSION_ . (Ale nie z crona)
donquixote
1
@donquixote Try PID=$(pgrep -f 'gnome-session' | head -n1)!
Jānis Elmeris,
Można wymienić DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)ze $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Ponieważ grep dostaje nazwę zmiennej zbyt. źródło
wjandrea,
1
pgrep gnome-sessionmoże zwrócić więcej niż jeden pid, jeśli do systemu zalogowanych jest wielu użytkowników (każdy z uruchomioną sesją gnome). Być może EUID=$(id --real --user)i PID=$(pgrep --euid $EUID gnome-session)byłby to sposób na uzyskanie tylko PID powiązanego z sesją gnome bieżącego użytkownika.
unutbu