एकता में कमांड लाइन से डेस्कटॉप पृष्ठभूमि कैसे बदलें?


63

मेरे पास एक स्क्रिप्ट है जो हर दिन नासा एपीओडी के साथ मेरी डेस्कटॉप पृष्ठभूमि को अपडेट करती है। 11.10 में अपग्रेड करने के बाद से, उस स्क्रिप्ट ने काम करना बंद कर दिया, शायद इसलिए क्योंकि मैं gconftool-2वास्तव में डेस्कटॉप पृष्ठभूमि को अपडेट करने के लिए उपयोग कर रहा हूं । क्या एकता के तहत ऐसा करने का कोई नया तरीका है?

जवाबों:


82

एकता और सूक्ति शैल (सूक्ति 3) दोनों GConf के बजाय अब GSettings का उपयोग करते हैं। तो यूनिटी और गनोम शेल में आप उसके लिए कमांड-लाइन टूल का उपयोग कर सकते हैं gsettings। जैसे gconftool, यह आपको एक व्यक्तिगत कुंजी प्राप्त या सेट करने देता है।

आप निम्न छवि का वर्तमान URI प्राप्त कर सकते हैं:

gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'

और पृष्ठभूमि URI को निम्नानुसार सेट करें (जो तुरंत आपके डेस्कटॉप पृष्ठभूमि को अपडेट करेगा):

gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg

ध्यान दें कि आपको इसके लिए (इसके विपरीत gconftool) काम करने के लिए "फ़ाइल: //" के साथ यूआरआई को प्रस्तुत करना होगा ।

Gnome 2 और Shell / Unity दोनों के साथ अपनी स्क्रिप्ट का काम करने के लिए, आप इसे Gnome संस्करण की जाँच कर सकते हैं:

gnome-session --version

यह Gnome के संस्करण को वापस कर देगा। यदि संस्करण संख्या 3 से शुरू होती है, तो gsettingsइसका उपयोग किया जा सकता है। यदि यह 2 से शुरू होने वाले संस्करण को लौटाता है, तो अपनी स्क्रिप्ट का उपयोग gconftoolकरने दें।


मैंने Ubuntu 12.04 में इस कमांड का उपयोग किया और सिस्टम क्रैश हो गया
YumYumYum

2
@YumYumYum: यह अत्यधिक असामान्य है कि उपरोक्त कमांड आपके सिस्टम को क्रैश कर देगी, जब तक कि आपके सिस्टम में कुछ और न चल रहा हो।
सेरानो

आप दालचीनी को डेस्कटॉप पर्यावरण की सूची में gsettings का उपयोग करके जोड़ सकते हैं;)
MrVaykadji

ध्यान दें कि आपको काम करने के लिए "फ़ाइल: //" के साथ यूआरआई को प्रस्तुत करना होगा (gconftool के विपरीत)। <- यह महत्वपूर्ण है! मुझे यह स्पष्ट रूप से कहीं और नहीं मिला।
टॉम

2
यह उस चालू उपयोगकर्ता के लिए ठीक है, जो मैं लॉग इन करना चाहता हूं। मैं जानना चाहता हूं कि किसी अन्य उपयोगकर्ता के प्रोग्राम को कैसे बदला जा सकता है ! मैंने sudo --user = <username> gsettings ... की कोशिश की, लेकिन वह असफल रहा।
काइवन

12

यह कोड बेतरतीब ढंग से दिए गए डायरेक्टरी से वॉलपेपर बदलता है।

#!/bin/bash

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

इस स्क्रिप्ट को सहेजें और कमांड "crontab -e" के साथ संपादित करें (यह एक संपादक को लॉन्च करता है जहां आपने फ़ाइल के अंत में यह लाइन लगाई है):

*/1     *     *     *     *         /bin/bash /path/to/script.sh

1
वॉलपेपर निर्देशिका में केवल वॉलपेपर फ़ाइलें और कोई निर्देशिका नहीं होनी चाहिए।
लोक्सैक्स

हालांकि, क्रेटिंग से gsettings काम नहीं करेंगे। कार्य करने के लिए gsettings के लिए आपको DBUS_SESSION_BUS_ADDRESS वातावरण चर सेट करना होगा। आप इन दो पंक्तियों को gsettings से पहले जोड़कर कर सकते हैं (अर्धविराम द्वारा अलग लाइनें :) PID = $ (pgrep gnome-session); निर्यात करें
अक्टूबर को 13:18 बजे

6

परिचय

यह उत्तर मूल उत्तर का संपादन है। जैसा कि मैंने अपने उबंटू और लिनक्स अध्ययनों में प्रगति की है, मैंने विभिन्न प्रकार के दृष्टिकोणों की खोज की है और उबंटू में पृष्ठभूमि की स्थापना कैसे की जाती है, इस बारे में मेरी समझ को गहरा किया है। यह उत्तर मेरी कोशिश है कि मैंने यथासंभव इस प्रकार से दस्तावेज़ बनाने का प्रयास किया है, और इस उम्मीद में किया जाता है कि यह सामग्री दूसरों के लिए उपयोगी हो सकती है।

महत्वपूर्ण हिस्सा यह है कि कमांड लाइन से एकता डेस्कटॉप के लिए पृष्ठभूमि सेट करने के लिए, आप उपयोग कर सकते हैं

gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'

यूनिटी बनाम नंगे एक्स डेस्कटॉप में पृष्ठभूमि की स्थापना

जिस तरह से यूनिटी काम करता है वह नीचे की तरह नंगे एक्स डेस्कटॉप है, और ऊपर एकता की डेस्कटॉप विंडो है (जो वास्तव में नौटिलस की खिड़की का एक विशेष उदाहरण है, उबंटू का डिफ़ॉल्ट फ़ाइल प्रबंधक)। इस प्रकार, जब आप कॉल करते हैं

gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'

उस विशेष Nautilus विंडो के लिए पृष्ठभूमि सेट करता है। जब आप डेस्कटॉप आइकन को निष्क्रिय कर देते हैं

gsettings set org.gnome.desktop.background show-desktop-icons false

जो Nautilus डेस्कटॉप को मार देगा और आपको नंगे हड्डियों वाला X डेस्कटॉप दिखाएगा। नंगे-हड्डी एक्स डेस्कटॉप के लिए आप fehप्रोग्राम का उपयोग कर सकते हैं । विशेष रूप से, यह आदेश:

feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg

वहाँ भी है कि जीयूआई विकल्प nitrogen,। fehऔर nitrogenदृष्टिकोण जैसे एकता के अलावा अन्य डेस्कटॉप, साथ इस्तेमाल किया जा सकता openboxया blackboxgsettingsदृष्टिकोण एकता या अन्य सूक्ति-आधारित डेस्कटॉप के साथ प्रयोग किया जा सकता है।

Gsettings कमांड को निष्क्रिय करना

वास्तव में gsettingsकमांड क्या करता है? ठीक है, सबसे पहले, प्रत्येक उपयोगकर्ता के लिए सेटिंग्स का dconf डेटाबेस मौजूद है , जिसका उद्देश्य वंचित GConf के प्रतिस्थापन के रूप में है , और यह dconfकमांड या के माध्यम से सुलभ है gsettings। विशेष रूप से, हम साथ यहाँ काम कर रहे org.gnome.desktop.background, स्कीमा और उसके कुंजियों में से एक picture-uri

URI, जो file:///home/JohnDoe/Pictures/cool_wallpaper.pngवास्तव में यूनिफ़ॉर्म रिसोर्स आइडेंटिफ़ायर के लिए खड़ा है , जो मूल रूप से इंटरनेट उपयोग के लिए बनाया गया था, लेकिन फ़ाइल URI स्कीम है, जिसे हम यहाँ देखते हैं। यूआरआई के बारे में क्या अच्छा है कि यह बाइट-एन्कोडेड पथ देता है यदि आप एक गैर-अंग्रेजी लोकेल का उपयोग करते हैं, उदाहरण के लिए मेरे चीनी डेस्कटॉप के साथ, मैं अपने बैकग्राउंड के लिए यूआरआई का पालन कर रहा हूं:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'

स्क्रिप्टिंग gsettings के साथ

बेशक, हर बार कमांड लिखना थकाऊ होता है और कोई थोड़ा सा स्क्रिप्टिंग जादू का उपयोग कर सकता है। उदाहरण के लिए, यहां मैंने जो कुछ भी सेट किया है, ~/.bashrcताकि मैं पृष्ठभूमि को बदल सकूं:

change_background() {
    FILE="'file://$(readlink -e "$1" )'" 
    if [ "$FILE" != "'file://'" ] 
    then
        gsettings set org.gnome.desktop.background picture-uri "$FILE" 
    else
        echo "File doesn't exist" 
    fi 
} 

इस फ़ंक्शन को पूर्ण पथ के साथ बुलाया जा सकता है जैसे

change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg

या वर्तमान कार्य निर्देशिका से संबंधित पथ के साथ

change_background Pictures/cool_wallpaper.jpg

यह भी जाँच करता है कि क्या फ़ाइल मौजूद है और सिमिलिंक को हल करता है। इसका उपयोग शेल स्क्रिप्ट में या दैनिक उपयोग के लिए स्टैंडअलोन फ़ंक्शन के रूप में किया जा सकता है।

बेशक, यह एकमात्र तरीका नहीं है। पायथन में Gio के लिए एक एपीआई है (जो पीछे मुख्य पुस्तकालय है gsettings)। मैंने एक फ़ंक्शन gsettings_getऔर gsettings_setफ़ंक्शन लिखा है , जो लॉन्चर लिस्ट इंडिकेटर जैसी अन्य परियोजनाओं के लिए काफी उपयोगी था । पृष्ठभूमि सेट करने के मामले में, इसका उपयोग भी किया जा सकता है और मैंने इस प्रश्न के लिए हाल ही में इसका उपयोग किया है । यहाँ उसी दृष्टिकोण का एक सरलीकृत संस्करण है:

#!/usr/bin/env python3
"""
Author: Serg Kolo , <1047481448@qq.com>
Date: December, 21,2016
Purpose: script for setting wallpaper, the pythonic way
Written for: https://askubuntu.com/q/66914/295286
"""
from gi.repository import Gio
import os,sys,random

def gsettings_set(schema, path, key, value):
    """Set value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema, path)
    if isinstance(value, list):
        return gsettings.set_strv(key, value)
    if isinstance(value, int):
        return gsettings.set_int(key, value)
    if isinstance(value,str): 
        return gsettings.set_string(key,value)

def error_and_exit(message):
    sys.stderr.write(message + "\n")
    sys.exit(1)

def main():
    gschema='org.gnome.desktop.background'
    key='picture-uri'
    if len(sys.argv) != 2:
        error_and_exit('>>> Path to a file is required')
    if not os.path.isfile(sys.argv[1]):
        error_and_exit('>>> Path "' + sys.argv[1] + \
                       '" isn\'t a file or file doesn\'t exit')
    full_path = os.path.abspath(sys.argv[1])
    uri = Gio.File.new_for_path(full_path).get_uri()
    gsettings_set(gschema,None,key,uri)


if __name__ == '__main__': main()

बेशक, स्क्रिप्ट के लिए समान नियम यहां भी लागू होते हैं: यह सुनिश्चित करें कि इसे chmod +x set_wallpaper.py(अधिमानतः) ~/binफ़ोल्डर में स्टोर किया जाए । उपयोग सरल है: ./set_wallpaper.py Picture/cool_image.py इस स्क्रिप्ट का स्रोत कोड मेरे GitHub रिपॉजिटरी पर कई अन्य लिपियों के साथ भी उपलब्ध है।


1

सेरानो के भयानक उत्तर के लिए धन्यवाद, मैं इस स्क्रिप्ट को लिखने में सक्षम था जिसका उपयोग मैं अपनी नई मशीन सेटअप स्क्रिप्ट के भाग के रूप में एक ब्लैकबोर्ड सेट करने के लिए करता हूं:

#! /bin/bash
SRC_URI="https://i.imgur.com/uomkVIL.png"
FNAME="/home/$USER/Pictures/black.png"
wget "$SRC_URI" -O "$FNAME"
gsettings set org.gnome.desktop.background picture-uri "$FNAME"

1

इसके अलावा आप इसका उपयोग कर सकते हैं:

dconf write "/org/gnome/desktop/background/picture-uri" "'file:///home/YOUR_USER/bg.png'"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.