El fondo no cambia usando gsettings de cron

11

Estoy tratando de cambiar mi fondo de pantalla a una imagen aleatoria usando el script sugerido por Indrajith Indraprastham aquí: ¿Cómo cambiar el fondo del escritorio desde la línea de comandos en Unity?

Cuando ejecuto el script desde una ventana de terminal, el bg cambia muy bien, pero cuando se ejecuta desde cron, recibo este error:

(proceso: 21901): dconf-WARNING **: no se pudieron confirmar los cambios en dconf: Error al generar la línea de comando 'dbus-launch --autolaunch = 00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr': el proceso secundario salió con el código 1

Apreciaria cualquier sugerencia.

Shaun
fuente
1
@Merri, aparte del hecho de que las respuestas allí no resuelven el problema de la OP (que no lo convertiría en un engaño por cierto), ¿cómo sería esto un engaño? El mismo error no significa que sea la misma pregunta.
Jacob Vlijm

Respuestas:

16

Edición de gsettings desde cron; variable de entorno faltante

Si ejecuta el script desde su propio entorno (por ejemplo, desde una ventana de terminal o desde aplicaciones de inicio), se establecerán varias variables de entorno. cronsin embargo, ejecuta su script con un conjunto limitado de variables de entorno.

Para editar con gsettingséxito desde cron, debe establecer la DBUS_SESSION_BUS_ADDRESSvariable de entorno. Puede hacerlo agregando dos líneas a su secuencia de comandos, como se describe aquí (y a continuación).

Su secuencia de comandos, incluida la configuración de la variable necesaria

El script de aquí , editado para incluir la DBUS_SESSION_BUS_ADDRESSvariable de entorno, se convierte en:

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

Relacionado: Ejecutar .sh cada 5 minutos

Jacob Vlijm
fuente
@Shaun De nada! Me alegro de que funcione :)
Jacob Vlijm
1
Estoy intentando esto con canela en menta. Cuando ejecuto esto directamente desde el cli, obtengo "dconf-WARNING *: falló al confirmar los cambios a dconf: la dirección dada está vacía". Solía ​​funcionar antes (desde cli), sin el PID y DBUS_SESSION_ . (Pero no de cron)
donquixote
1
@donquixote PID=$(pgrep -f 'gnome-session' | head -n1)¡ Pruébalo !
Jānis Elmeris
Puede reemplazar DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)con $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Since grep también obtiene el nombre de la variable. fuente
wjandrea
1
pgrep gnome-sessionpuede devolver más de un pid si varios usuarios están conectados al sistema (cada uno ejecuta gnome-session). Quizás EUID=$(id --real --user)y PID=$(pgrep --euid $EUID gnome-session)sería una forma de obtener solo el PID asociado con la sesión de gnomo del usuario actual.
unutbu