क्रोन से gsettings का उपयोग कर पृष्ठभूमि नहीं बदल रहा है


11

मैं इंद्रजीत इंद्रप्रस्थम की सुझाई गई स्क्रिप्ट का उपयोग करके अपने वॉलपेपर को एक यादृच्छिक छवि में बदलने की कोशिश कर रहा हूं: डेस्कटॉप पृष्ठभूमि को एकता में कमांड लाइन से कैसे बदला जाए?

जब मैं एक टर्मिनल विंडो से स्क्रिप्ट चलाता हूं, तो bg बस ठीक बदलता है, लेकिन जब इसे cron से चलाया जाता है, तो मुझे यह त्रुटि मेल होती है:

(प्रक्रिया: 21901): dconf-WARNING **: dconf में परिवर्तन करने में विफल रहा: त्रुटि स्पैनिंग कमांड लाइन 'dbus-launch --autolaunch = 00216c114dcf433c9bc9009985dd77b6-binary-syntax-close-stderr': कोड के साथ चाइल्ड प्रोसेस जारी है।

हम किसी भी सुझाव की सराहना करेंगे।


1
@ मिरी इस तथ्य से अलग है कि वहां के जवाब ओपी की समस्या का समाधान नहीं करते हैं (जो इसे रास्ते से हटा नहीं पाएगा), यह कैसे एक धोखा होगा ???? समान त्रुटि का मतलब यह नहीं है कि यह वही प्रश्न है।
जैकब व्लिजम

जवाबों:


16

क्रोन से gsettings का संपादन; लापता पर्यावरण चर

यदि आप अपने स्वयं के वातावरण से स्क्रिप्ट चलाते हैं (जैसे टर्मिनल विंडो या स्टार्टअप एप्लिकेशन से), तो कई पर्यावरण चर सेट किए जाएंगे। cronहालाँकि, आपकी स्क्रिप्ट पर्यावरण चर के सीमित सेट के साथ चलती है।

gsettingsसे सफलतापूर्वक संपादित करने के लिए cron, आपको DBUS_SESSION_BUS_ADDRESSपर्यावरण चर सेट करने की आवश्यकता है । आप अपनी स्क्रिप्ट में दो पंक्तियों को जोड़कर ऐसा कर सकते हैं, जैसा कि यहां (और नीचे) वर्णित है

आपकी स्क्रिप्ट, जिसमें आवश्यक चर सेट करना शामिल है

पर्यावरण चर को शामिल करने के लिए यहाँ से लिपि को संपादित किया DBUS_SESSION_BUS_ADDRESSजाता है, फिर बनता है:

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

संबंधित: हर 5 मिनट .sh चल रहा है


@ शौन आप का स्वागत है! खुशी है कि यह काम करता है :)
याकूब Vlijm

1
मैं मिंट पर दालचीनी के साथ यह कोशिश कर रहा हूं। जब मैं इसे सीधे cli से चलाता हूं, तो मुझे "dconf-WARNING * मिलता है: dconf में परिवर्तन करने में विफल: दिया गया पता खाली है"। यह PID और DBUS_SESSION_ के बिना (cli से) पहले काम करता था । (लेकिन क्रोन से नहीं)
दान करें

1
@donquixote आज़माएं PID=$(pgrep -f 'gnome-session' | head -n1)!
जानिस एल्मरिस

आप बदल सकते हैं DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)के साथ $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)के बाद से ग्रेप भी चर नाम हो जाता है। source
wjandrea

1
pgrep gnome-sessionयदि एक से अधिक उपयोगकर्ता सिस्टम (प्रत्येक चल रहे ग्नोम-सत्र) में लॉग इन करें तो एक से अधिक पीड वापस आ सकते हैं। शायद EUID=$(id --real --user)और PID=$(pgrep --euid $EUID gnome-session)वर्तमान उपयोगकर्ता के सूक्ति सत्र से जुड़े केवल पीआईडी ​​को प्राप्त करने का एक तरीका होगा।
अनटुब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.