Unity'deki komut satırından masaüstü arka planı nasıl değiştirilir?

60

Her gün masaüstü arka planımı NASA APOD ile güncelleyen bir komut dosyası var. 11.10'a yükseltildiğinden beri, bu komut dosyası çalışmayı durdurdu, muhtemelen masaüstü arka planını güncelleştirmek için gconftool-2 kullanıyorum. Bunu Birlik altında yapmanın yeni bir yolu var mı?

    
sordu Shaddi 15.10.2011 17:25

5 cevap

78
___ answer510135 ___

Bu kod, duvar kağıdını belirli bir dizinden rastgele değiştirir.

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

Bu komut dosyasını kaydedin ve "crontab -e" komutunu kullanarak düzenleyin (bu satırı dosyanın sonuna koyduğunuz bir editör başlatır):

gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
    
___ qstnhdr ___ Unity'deki komut satırından masaüstü arka planı nasıl değiştirilir? ___ qstntxt ___

Her gün masaüstü arka planımı NASA APOD ile güncelleyen bir komut dosyası var. 11.10'a yükseltildiğinden beri, bu komut dosyası çalışmayı durdurdu, muhtemelen masaüstü arka planını güncelleştirmek için gsettings kullanıyorum. Bunu Birlik altında yapmanın yeni bir yolu var mı?

    
___ answer69500 ​​___

Hem Unity hem de Gnome Shell (Gnome 3) artık Gettf yerine GSettings kullanıyor. Böylece Unity ve Gnome Shell'de bunun için gconftool komut satırı aracını kullanabilirsiniz. % Co_de% gibi, bireysel bir anahtar almanıza veya ayarlamanıza da izin verir.

Arka plan resminin şu anki URI'sini aşağıdaki gibi alabilirsiniz:

gnome-session --version

Ve arka plan URI'sını aşağıdaki gibi ayarlayın (bu, hemen masaüstü arka planınızı güncelleyecektir):

%pre%

Bunun çalışması için URI'yı "file: //" ile başlatacağınızı unutmayın ( gconftool 'dan farklı olarak).

Komut dosyanızın hem Gnome 2 hem de Shell / Unity ile çalışmasını sağlamak için önce bir Gnome sürüm kontrolü yapmasına izin verebilirsiniz:

%pre%

Gnome'ın sürümünü döndürecek. Sürüm numarası 3 ile başlıyorsa, gsettings kullanılabilir. 2 ile başlayan bir sürümü döndürürse, komut dosyanızın yerine gconftool kullanmasına izin verin.

    
___ answer657128 ___

Ayrıca bunu kullanabilirsiniz:

%pre%     
___ answer701392 ___

Tanıtım

Bu cevap, orijinal cevabın bir düzenlemesidir. Ubuntu ve Linux çalışmalarında ilerledikçe, çeşitli yaklaşımları keşfettim ve Ubuntu'da bir arka plan oluşturmanın nasıl çalıştığını anlamamı derinleştirdim. Bu cevap, şimdiye kadar öğrendiklerimi mümkün olan en iyi şekilde belgeleme girişimimdir ve bu materyalin başkaları için yararlı olabileceği umuduyla yapılır.

Önemli olan, Unity masaüstünün komut satırından arka planını ayarlamaktır.

%pre%

Unity vs bare X masaüstünde arka plan ayarlama

Unity'nin çalışma şekli, aşağıdaki X masaüstü bilgisayarının altında olduğu ve bunun üzerinde, Unity'nin masaüstü penceresi (yukarıdaki Ubuntu'nun varsayılan dosya yöneticisi olan Nautilus'un penceresinin özel bir örneğidir) vardır. Böylece, aradığınızda

%pre%

, bu özel Nautilus penceresinin arka planını ayarlar.

ile masaüstü simgelerini devre dışı bıraktığınızda %pre%

Nautilus masaüstünü öldürecek ve size çıplak masaüstü X masaüstünü gösterecek. Çıplak kemik X masaüstü için %code% programını kullanabilirsiniz. Özellikle, bu komut:

%pre%

Ayrıca GUI alternatifi de var, %code% . % Co_de% ve %code% yaklaşımları, %code% veya %code% gibi Unity dışındaki masaüstü bilgisayarlarda kullanılabilir. % Co_de% yaklaşımı Unity veya diğer GNOME tabanlı masaüstü bilgisayarlarla kullanılabilir.

Gsettings komutunu kesme

%code% komutu tam olarak ne yapar? Her şeyden önce, her kullanıcı için dconf veritabanı var; bir href="https://en.wikipedia.org/wiki/GConf"> GConf ve %code% komutu veya %code% yoluyla erişilebilir. Özellikle, burada %code% şeması ve anahtarlarından biri %code% .

URI, %code% , aslında internet kullanımı için oluşturulmuş olan Tekdüzen Kaynak Tanımlayıcısı anlamına gelir, ancak Burada gördüğümüz dosya URI şeması var. URI hakkında harika olan şey, ingilizce kodlanmış bir yol sağlamasıdır, örneğin ingilizce olmayan bir yerel ayar kullanırsanız, örneğin Çin masaüstü bilgisayarımla, benim için aşağıdaki URI'yi takip ediyorum: %code%

Gsettings ile komut dosyası oluşturma

Tabii ki, her seferinde komut yazılırken, bir tanesi de biraz yazım sihrini kullanabilir. Mesela, %code% değerinde ayarladığım şey şu ki arka planı değiştireceğim:

%pre%

Bu işlev,

gibi mutlak yollarla çağrılabilir %pre%

veya geçerli çalışma dizininden göreceli bir yolla

%pre%

Ayrıca, dosya mevcutsa ve sembolik bağlantıları çözerse bir kontrol gerçekleştirir. Bu, bir kabuk komut dosyasında veya günlük kullanım için bağımsız bir işlev olarak kullanılabilir.

Tabii ki, bu tek yol değil. Python'un bir Java API'si vardır ( %code% 'nin arkasındaki ana kütüphanedir). Başlatıcı Listesi Göstergesi gibi diğer projeler için oldukça yararlı olan %code% ve %code% işlevleri yazdım. . Bir arka plan belirleme durumunda da kullanılabilir ve kısa süre önce bu soru için kullandım. İşte aynı yaklaşımın basitleştirilmiş bir versiyonu:

%pre%

Tabii ki, komut dosyaları için aynı kurallar burada da geçerlidir: %code% ile çalıştırılabilir olduğundan emin olun ve %code% klasöründe saklayın. Kullanımı basit: %code% Bu betiğin kaynak kodu, GitHub havuzumda da kullanılabilir. diğer birçok betik de.

    
___ answer776134 ___

Serrano'nun müthiş cevabı sayesinde, yeni makine kurulum komut dosyalarının bir parçası olarak kullandığım bu senaryoyu siyah bir arka plan oluşturmak için yazabildim:

%pre%     
___
verilen cevap Serrano 20.10.2011 00:16
11

Bu kod, duvar kağıdını belirli bir dizinden rastgele değiştirir.

#!/bin/bash

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

Bu komut dosyasını kaydedin ve "crontab -e" komutunu kullanarak düzenleyin (bu satırı dosyanın sonuna koyduğunuz bir editör başlatır):

*/1     *     *     *     *         /bin/bash /path/to/script.sh
    
verilen cevap Indra 12.08.2014 09:09
5

Tanıtım

Bu cevap, orijinal cevabın bir düzenlemesidir. Ubuntu ve Linux çalışmalarında ilerledikçe, çeşitli yaklaşımları keşfettim ve Ubuntu'da bir arka plan oluşturmanın nasıl çalıştığını anlamamı derinleştirdim. Bu cevap, şimdiye kadar öğrendiklerimi mümkün olan en iyi şekilde belgeleme girişimimdir ve bu materyalin başkaları için yararlı olabileceği umuduyla yapılır.

Önemli olan, Unity masaüstünün komut satırından arka planını ayarlamaktır.

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

Unity vs bare X masaüstünde arka plan ayarlama

Unity'nin çalışma şekli, aşağıdaki X masaüstü bilgisayarının altında olduğu ve bunun üzerinde, Unity'nin masaüstü penceresi (yukarıdaki Ubuntu'nun varsayılan dosya yöneticisi olan Nautilus'un penceresinin özel bir örneğidir) vardır. Böylece, aradığınızda

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

, bu özel Nautilus penceresinin arka planını ayarlar.

ile masaüstü simgelerini devre dışı bıraktığınızda
gsettings set org.gnome.desktop.background show-desktop-icons false

Nautilus masaüstünü öldürecek ve size çıplak masaüstü X masaüstünü gösterecek. Çıplak kemik X masaüstü için feh programını kullanabilirsiniz. Özellikle, bu komut:

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

Ayrıca GUI alternatifi de var, nitrogen . % Co_de% ve feh yaklaşımları, nitrogen veya openbox gibi Unity dışındaki masaüstü bilgisayarlarda kullanılabilir. % Co_de% yaklaşımı Unity veya diğer GNOME tabanlı masaüstü bilgisayarlarla kullanılabilir.

Gsettings komutunu kesme

blackbox komutu tam olarak ne yapar? Her şeyden önce, her kullanıcı için dconf veritabanı var; bir href="https://en.wikipedia.org/wiki/GConf"> GConf ve gsettings komutu veya gsettings yoluyla erişilebilir. Özellikle, burada dconf şeması ve anahtarlarından biri gsettings .

URI, org.gnome.desktop.background , aslında internet kullanımı için oluşturulmuş olan Tekdüzen Kaynak Tanımlayıcısı anlamına gelir, ancak Burada gördüğümüz dosya URI şeması var. URI hakkında harika olan şey, ingilizce kodlanmış bir yol sağlamasıdır, örneğin ingilizce olmayan bir yerel ayar kullanırsanız, örneğin Çin masaüstü bilgisayarımla, benim için aşağıdaki URI'yi takip ediyorum: picture-uri

Gsettings ile komut dosyası oluşturma

Tabii ki, her seferinde komut yazılırken, bir tanesi de biraz yazım sihrini kullanabilir. Mesela, file:///home/JohnDoe/Pictures/cool_wallpaper.png değerinde ayarladığım şey şu ki arka planı değiştireceğim:

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

Bu işlev,

gibi mutlak yollarla çağrılabilir
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg

veya geçerli çalışma dizininden göreceli bir yolla

change_background Pictures/cool_wallpaper.jpg

Ayrıca, dosya mevcutsa ve sembolik bağlantıları çözerse bir kontrol gerçekleştirir. Bu, bir kabuk komut dosyasında veya günlük kullanım için bağımsız bir işlev olarak kullanılabilir.

Tabii ki, bu tek yol değil. Python'un bir Java API'si vardır ( 'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg' 'nin arkasındaki ana kütüphanedir). Başlatıcı Listesi Göstergesi gibi diğer projeler için oldukça yararlı olan ~/.bashrc ve gsettings işlevleri yazdım. . Bir arka plan belirleme durumunda da kullanılabilir ve kısa süre önce bu soru için kullandım. İşte aynı yaklaşımın basitleştirilmiş bir versiyonu:

#!/usr/bin/env python3
"""
Author: Serg Kolo , <[email protected]>
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()

Tabii ki, komut dosyaları için aynı kurallar burada da geçerlidir: gsettings_get ile çalıştırılabilir olduğundan emin olun ve gsettings_set klasöründe saklayın. Kullanımı basit: chmod +x set_wallpaper.py Bu betiğin kaynak kodu, GitHub havuzumda da kullanılabilir. diğer birçok betik de.

    
verilen cevap Sergiy Kolodyazhnyy 23.11.2015 07:49
1

Ayrıca bunu kullanabilirsiniz:

dconf write "/org/gnome/desktop/background/picture-uri" "'file:///home/YOUR_USER/bg.png'"
    
verilen cevap Alexander 06.08.2015 07:08
0

Serrano'nun müthiş cevabı sayesinde, yeni makine kurulum komut dosyalarının bir parçası olarak kullandığım bu senaryoyu siyah bir arka plan oluşturmak için yazabildim:

#! /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"
    
verilen cevap jerblack 23.05.2016 01:45

Etiketlerdeki diğer soruları oku