Odpowiedzi:
Zarówno Unity, jak i Gnome Shell (Gnome 3) używają teraz GSettings zamiast GConf. Więc w Unity i Gnome Shell możesz do tego użyć narzędzia wiersza poleceń gsettings
. Jak gconftool
, pozwala uzyskać lub ustawić indywidualny klucz.
Możesz uzyskać bieżący identyfikator URI obrazu tła w następujący sposób:
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
I ustaw identyfikator URI tła w następujący sposób (który natychmiast zaktualizuje tło pulpitu):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
Zauważ, że musisz dodać identyfikator URI z „file: //”, aby to zadziałało (w przeciwieństwie do gconftool
).
Aby skrypt działał zarówno z Gnome 2, jak i Shell / Unity, możesz najpierw pozwolić na sprawdzenie wersji Gnome:
gnome-session --version
To zwróci wersję Gnome. Jeśli numer wersji zaczyna się od 3, gsettings
można go użyć. Jeśli zwraca wersję zaczynającą się od 2, pozwól skryptu użyć gconftool
zamiast tego.
Ten kod losowo zmienia tapetę z danego katalogu.
#!/bin/bash
DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"
Zapisz ten skrypt i edytuj go za pomocą polecenia „crontab -e” (uruchamia edytor, w którym umieszczasz ten wiersz na końcu pliku):
*/1 * * * * /bin/bash /path/to/script.sh
Ta odpowiedź jest edycją oryginalnej odpowiedzi. W miarę postępów w badaniach nad Ubuntu i Linuksem odkryłem różne podejścia i pogłębiłem wiedzę o tym, jak ustawienie tła działa w Ubuntu. Ta odpowiedź jest moją próbą udokumentowania jak najlepiej tego, czego się nauczyłem do tej pory, i mam nadzieję, że ten materiał może być przydatny dla innych.
Ważną częścią jest to, że możesz ustawić tło pulpitu Unity z wiersza poleceń, możesz użyć
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Sposób działania Unity polega na tym, że poniżej znajduje się pusty pulpit X, a powyżej okno pulpitu Unity (które w rzeczywistości jest specjalną instancją okna Nautilusa, domyślnego menedżera plików Ubuntu). Tak więc, kiedy dzwonisz
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
który ustawia tło dla tego specjalnego okna Nautilus. Po wyłączeniu ikon pulpitu za pomocą
gsettings set org.gnome.desktop.background show-desktop-icons false
który zabije pulpit Nautilus i pokaże pulpit X od podstaw. W przypadku pulpitu X goły kość można użyć feh
programu. W szczególności to polecenie:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Jest także alternatywą dla GUI, że nitrogen
. feh
I nitrogen
podejścia mogą być stosowane z pulpitów innych niż jedność, jak openbox
i blackbox
. gsettings
Podejście może być używany z Jedności lub innego GNOME oparte.
Co dokładnie robi gsettings
polecenie? Po pierwsze, istnieje baza danych dconf z ustawieniami dla każdego użytkownika, która ma zastąpić przestarzały GConf i jest dostępna za pomocą dconf
komendy lub gsettings
. W szczególności, mamy tu do czynienia ze
org.gnome.desktop.background
schematem a jednym z jej kluczy picture-uri
.
Identyfikator URI, który file:///home/JohnDoe/Pictures/cool_wallpaper.png
faktycznie oznacza Uniform Resource Identifier , który pierwotnie został stworzony do użytku w Internecie, ale istnieje schemat pliku URI , który widzimy tutaj. Co fajne w URI jest to, że daje ścieżkę zakodowaną w bajtach, jeśli używasz ustawień narodowych innych niż angielski, na przykład na moim chińskim pulpicie, mam następujący URI dla mojego tła:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Oczywiście pisanie polecenia za każdym razem jest żmudne i można użyć odrobiny magii skryptowej. Na przykład oto, co ustawiłem, ~/.bashrc
aby móc dowolnie zmieniać tło:
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
}
Tę funkcję można wywołać za pomocą ścieżki bezwzględnej, takiej jak
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
lub ze względną ścieżką z bieżącego katalogu roboczego
change_background Pictures/cool_wallpaper.jpg
Sprawdza również, czy plik istnieje i rozwiązuje dowiązania symboliczne. Może to być użyte w skrypcie powłoki lub jako samodzielna funkcja do codziennego użytku.
Oczywiście nie jest to jedyny sposób. Python ma interfejs API dla Gio (który jest główną biblioteką gsettings
). Napisałem a gsettings_get
i gsettings_set
funkcje, które były całkiem przydatne dla innych projektów, takich jak Launcher List Indicator . W przypadku ustawienia tła można go również użyć i użyłem go niedawno do tego pytania . Oto uproszczona wersja tego samego podejścia:
#!/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()
Oczywiście obowiązują tu również te same zasady dla skryptów: upewnij się, że jest on wykonywalny chmod +x set_wallpaper.py
i przechowuj go (najlepiej) w ~/bin
folderze. Użycie jest proste: ./set_wallpaper.py Picture/cool_image.py
kod źródłowy tego skryptu jest również dostępny w moim repozytorium GitHub z wieloma innymi skryptami.
Dzięki niesamowitej odpowiedzi Serrano udało mi się napisać ten skrypt, którego używam jako części moich nowych skryptów konfiguracji maszyny, aby ustawić czarne tło:
#! /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"