Hintergrund ändert sich nicht mit gsettings von cron

10

Ich versuche, mein Hintergrundbild mithilfe des von Indrajith Indraprastham vorgeschlagenen Skripts in ein zufälliges Bild zu ändern : Wie ändere ich den Desktop-Hintergrund über die Befehlszeile in Unity?

Wenn ich das Skript über ein Terminalfenster ausführe, ändert sich das BG einwandfrei. Wenn es jedoch über Cron ausgeführt wird, wird folgende Fehlermeldung gesendet:

(Prozess: 21901): dconf-WARNING **: Änderungen an dconf konnten nicht festgeschrieben werden: Fehler beim Laichen der Befehlszeile 'dbus-launch --autolaunch = 00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr': Untergeordneter Prozess mit Code 1 beendet

Ich würde mich über Vorschläge freuen.

Shaun
quelle
1
@ Merri abgesehen von der Tatsache, dass die Antworten dort das Problem der OP nicht lösen (was es übrigens nicht zu einem Betrüger machen würde), wie wäre das ein Betrüger ???? Der gleiche Fehler bedeutet nicht, dass es sich um dieselbe Frage handelt.
Jacob Vlijm

Antworten:

15

Bearbeiten von Einstellungen von cron; fehlende Umgebungsvariable

Wenn Sie das Skript in Ihrer eigenen Umgebung ausführen (z. B. in einem Terminalfenster oder in Startanwendungen), wird eine Reihe von Umgebungsvariablen festgelegt. cronFührt Ihr Skript jedoch mit einem begrenzten Satz von Umgebungsvariablen aus.

Um gsettingserfolgreich zu bearbeiten cron, müssen Sie die DBUS_SESSION_BUS_ADDRESSUmgebungsvariable festlegen . Sie können dies tun, indem Sie Ihrem Skript zwei Zeilen hinzufügen, wie hier (und unten) beschrieben.

Ihr Skript, einschließlich der Einstellung der erforderlichen Variablen

Das Skript von hier , das so bearbeitet wurde, dass es die DBUS_SESSION_BUS_ADDRESSUmgebungsvariable enthält, lautet dann:

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

Verwandte: Alle 5 Minuten .sh ausführen

Jacob Vlijm
quelle
@Shaun Gern geschehen!
Ich bin
1
Ich versuche das mit Cinnamon on Mint. Wenn ich dies direkt von der CLI aus starte, erhalte ich "dconf-WARNING *: Änderungen an dconf konnten nicht festgeschrieben werden: Die angegebene Adresse ist leer". Früher funktionierte es (von cli) ohne PID und DBUS_SESSION_ . (Aber nicht von Cron)
Donquixote
1
@donquixote Versuchen Sie PID=$(pgrep -f 'gnome-session' | head -n1)!
Jānis Elmeris
Sie können ersetzen DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)mit $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Da grep zu den Variablennamen erhält. Quelle
Wjandrea
1
pgrep gnome-sessionkann mehr als eine PID zurückgeben, wenn mehrere Benutzer am System angemeldet sind (jede laufende Gnome-Sitzung). Vielleicht EUID=$(id --real --user)und PID=$(pgrep --euid $EUID gnome-session)wäre eine Möglichkeit, nur die PID zu erhalten, die der Gnome-Sitzung des aktuellen Benutzers zugeordnet ist.
Unutbu