Latar belakang tidak berubah menggunakan gsettings dari cron

11

Saya mencoba mengubah wallpaper saya menjadi gambar acak menggunakan skrip yang disarankan Indrajith Indraprastham di sini: Bagaimana cara mengubah latar belakang desktop dari baris perintah di Unity?

Ketika saya menjalankan skrip dari jendela terminal, bg berubah dengan baik, tetapi ketika dijalankan dari cron, saya mengirimkan kesalahan ini:

(proses: 21901): dconf-PERINGATAN **: gagal melakukan perubahan pada dconf: Kesalahan pemunculan baris perintah 'dbus-launch --autolaunch = 00216c114dcf433c9bb9009985d607d6 - biner-sintaks --close-stderr': Proses anak keluar dengan kode 1

Saya sangat menghargai saran apa pun.

Shaun
sumber
1
@Merri terlepas dari kenyataan bahwa jawaban di sana tidak menyelesaikan masalah OP (yang tidak akan membuatnya menjadi dupe), Bagaimana ini akan menjadi dupe ???? Kesalahan yang sama tidak berarti itu adalah pertanyaan yang sama.
Jacob Vlijm

Jawaban:

16

Mengedit gsettings dari cron; variabel lingkungan yang hilang

Jika Anda menjalankan skrip dari lingkungan Anda sendiri (misalnya dari jendela terminal atau dari Aplikasi Startup), sejumlah variabel lingkungan akan ditetapkan. cronnamun menjalankan skrip Anda dengan variabel lingkungan terbatas.

Agar gsettingsberhasil diedit cron, Anda perlu mengatur DBUS_SESSION_BUS_ADDRESSvariabel lingkungan. Anda dapat melakukannya dengan menambahkan dua baris ke skrip Anda, seperti yang dijelaskan di sini (dan di bawah).

Script Anda, termasuk mengatur variabel yang diperlukan

Script dari sini , diedit untuk memasukkan DBUS_SESSION_BUS_ADDRESSvariabel lingkungan, kemudian menjadi:

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

Terkait: Menjalankan .sh setiap 5 menit

Yakub Vlijm
sumber
@Shaun Sama-sama! Senang bekerja :)
Jacob Vlijm
1
Saya mencoba ini dengan Cinnamon on Mint. Ketika saya menjalankan ini dari cli secara langsung, saya mendapatkan "dconf-PERINGATAN *: gagal melakukan perubahan ke dconf: Alamat yang diberikan kosong". Dulu bekerja sebelumnya (dari cli), tanpa PID dan DBUS_SESSION_ . (Tapi bukan dari cron)
donquixote
1
@donquixote Coba PID=$(pgrep -f 'gnome-session' | head -n1)!
Jānis Elmeris
Anda dapat mengganti DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)dengan $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Karena grep juga mendapatkan nama variabel. sumber
wjandrea
1
pgrep gnome-sessiondapat mengembalikan lebih dari satu pid jika beberapa pengguna masuk ke sistem (setiap sesi berjalan gnome). Mungkin EUID=$(id --real --user)dan PID=$(pgrep --euid $EUID gnome-session)akan menjadi cara untuk mendapatkan hanya PID yang terkait dengan sesi gnome pengguna saat ini.
unutbu