introduzione
Questa risposta è una modifica della risposta originale. Mentre progredivo nei miei studi su Ubuntu e Linux, ho scoperto una varietà di approcci e approfondito la mia comprensione di come funziona l'impostazione di uno sfondo in Ubuntu. Questa risposta è il mio tentativo di documentare nel miglior modo possibile ciò che ho appreso finora, e si spera che questo materiale possa essere utile per gli altri.
La parte importante è che per impostare lo sfondo per il desktop Unity dalla riga di comando, è possibile utilizzare
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Impostazione dello sfondo in Unity vs bare X desktop
Il modo in cui Unity funziona è tale che c'è un desktop X nudo sotto e sopra c'è la finestra desktop di Unity (che in realtà è un'istanza speciale della finestra di Nautilus, il file manager predefinito di Ubuntu). Quindi, quando chiami
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
che fa da sfondo a quella speciale finestra di Nautilus. Quando si disabilitano le icone del desktop con
gsettings set org.gnome.desktop.background show-desktop-icons false
che ucciderà il desktop Nautilus e ti mostrerà il desktop X bare-bones. Per il desktop X bare-bone è possibile utilizzare il feh
programma. In particolare, questo comando:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
C'è anche GUI alternativo a quello, nitrogen
. Gli approcci feh
e nitrogen
possono essere utilizzati con desktop diversi da Unity, come openbox
o blackbox
. L' gsettings
approccio può essere utilizzato con Unity o altri desktop basati su GNOME.
Disabilitare il comando gsettings
Cosa fa esattamente il gsettings
comando? Bene, prima di tutto, esiste un database dconf di impostazioni per ciascun utente, che è inteso come sostituto di GConf obsoleto ed è accessibile tramite dconf
comando o gsettings
. In particolare, abbiamo a che fare qui con
org.gnome.desktop.background
schema e uno dei suoi tasti, picture-uri
.
L'URI, in file:///home/JohnDoe/Pictures/cool_wallpaper.png
realtà, sta per Uniform Resource Identifier , che originariamente è stato creato per l'utilizzo di Internet, ma esiste uno schema URI di file , che è quello che vediamo qui. La cosa interessante dell'URI è che fornisce un percorso con codifica byte se usi una locale non inglese, ad esempio con il mio desktop cinese, ho il seguente URI per il mio backgroun:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Scripting con gsettings
Naturalmente, scrivere il comando ogni volta è noioso e si può usare un po 'di magia per gli script. Ad esempio, ecco cosa ho impostato nel mio in ~/.bashrc
modo da poter cambiare lo sfondo a piacimento:
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
}
Questa funzione può essere chiamata con percorso assoluto come
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
o con percorso relativo dalla directory di lavoro corrente
change_background Pictures/cool_wallpaper.jpg
Esegue anche un controllo se il file esiste e risolve i collegamenti simbolici. Questo può essere usato in uno script di shell o come funzione autonoma per l'uso quotidiano.
Certo, questo non è l'unico modo. Python ha un'API per Gio (che è la libreria principale dietro gsettings
). Ho scritto funzioni gsettings_get
e gsettings_set
, che sono state molto utili per altri progetti come Indicatore elenco di avvio . In caso di impostazione di uno sfondo, può anche essere utilizzato e l'ho usato solo di recente per questa domanda . Ecco una versione semplificata di quello stesso approccio:
#!/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()
Naturalmente, qui si applicano anche le stesse regole per gli script: assicurarsi che sia reso eseguibile con chmod +x set_wallpaper.py
e memorizzarlo nella ~/bin
cartella (preferibilmente) . L'utilizzo è semplice: il ./set_wallpaper.py Picture/cool_image.py
codice sorgente di questo script è disponibile anche sul mio repository GitHub con molti altri script.