Segundo plano não é alterado usando gsettings do cron

11

Estou tentando alterar meu papel de parede para uma imagem aleatória usando o script sugerido por Indrajith Indraprastham aqui: Como alterar o plano de fundo da área de trabalho da linha de comando no Unity?

Quando executo o script a partir de uma janela de terminal, a bg muda muito bem, mas quando é executada a partir do cron, recebo este erro:

(processo: 21901): dconf-WARNING **: falha ao confirmar as alterações no dconf: Erro ao gerar a linha de comando 'dbus-launch --autolaunch = 00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr': processo filho encerrado com o código 1

Gostaria muito de receber sugestões.

Shaun
fonte
11
@ Merri, além do fato de que as respostas não resolvem o problema do OP (o que não faria dele um idiota por sinal), como isso seria um idiota ???? O mesmo erro não significa que é a mesma pergunta.
Jacob Vlijm

Respostas:

16

Editando gsettings do cron; variável de ambiente ausente

Se você executar o script em seu próprio ambiente (por exemplo, em uma janela do terminal ou em Aplicativos de Inicialização), várias variáveis ​​de ambiente serão definidas. cronno entanto, executa seu script com um conjunto limitado de variáveis ​​de ambiente.

Para editar com gsettingsêxito cron, é necessário definir a DBUS_SESSION_BUS_ADDRESSvariável de ambiente. Você pode fazer isso adicionando duas linhas ao seu script, conforme descrito aqui (e abaixo).

Seu script, incluindo a configuração da variável necessária

O script daqui , editado para incluir a DBUS_SESSION_BUS_ADDRESSvariável de ambiente, torna-se:

#!/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: Executando .sh a cada 5 minutos

Jacob Vlijm
fonte
@ Shaun De nada! Ainda bem que funciona :)
Jacob Vlijm
11
Estou tentando isso com canela na hortelã. Quando executo isso diretamente do cli, recebo "dconf-WARNING *: falha ao confirmar as alterações no dconf: o endereço fornecido está vazio". Costumava trabalhar antes (de cli), sem o PID e o DBUS_SESSION_ . (Mas não do cron)
donquixote
11
@donquixote Experimente PID=$(pgrep -f 'gnome-session' | head -n1)!
Jānis Elmeris 5/11
Você pode substituir DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)por $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Since grep também recebe o nome da variável. fonte
wjandrea,
11
pgrep gnome-sessionpode retornar mais de um pid se vários usuários estiverem conectados ao sistema (cada um executando o gnome-session). Talvez EUID=$(id --real --user)e PID=$(pgrep --euid $EUID gnome-session)seria uma maneira de obter apenas o PID associado à sessão de gnomo do usuário atual.
Unutbu