Introduction
Cette réponse est une édition de la réponse d'origine. Au fur et à mesure de mes études sur Ubuntu et Linux, j'ai découvert diverses approches et approfondi ma compréhension de la définition d'un contexte dans Ubuntu. Cette réponse est ma tentative de documenter le mieux possible ce que j’ai appris jusqu’à présent, en espérant que ce matériel pourra être utile à d’autres.
La partie importante est que pour définir l’arrière-plan du bureau Unity à partir de la ligne de commande, vous pouvez utiliser
.
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Définition de l'arrière-plan dans Unity par rapport au bureau bare X
Le fonctionnement de Unity est tel qu’il existe un bureau X nu au-dessous, et au-dessus se trouve la fenêtre du bureau de Unity (qui est en fait une instance spéciale de la fenêtre de Nautilus, le gestionnaire de fichiers par défaut d’Ubuntu). Ainsi, lorsque vous appelez
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
qui définit l’arrière-plan de cette fenêtre spéciale Nautilus. Lorsque vous désactivez les icônes du bureau avec
gsettings set org.gnome.desktop.background show-desktop-icons false
qui tuerait le bureau Nautilus et vous montrerait un bureau X épuré. Pour le bureau X nu, vous pouvez utiliser le programme feh
. En particulier, cette commande:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Il existe également une alternative graphique, nitrogen
. Les approches feh
et nitrogen
peuvent être utilisées avec des ordinateurs de bureau autres que Unity, tels que openbox
ou blackbox
. L’approche gsettings
peut être utilisée avec Unity ou un autre bureau basé sur GNOME.
Désactivation de la commande gsettings
Que fait exactement gsettings
command? Tout d’abord, il existe une dconf base de données de paramètres pour chaque utilisateur, destinée à remplacer les valeurs obsolètes < a href="https://en.wikipedia.org/wiki/GConf"> GConf , et il est accessible via la commande dconf
ou gsettings
. En particulier, nous traitons ici avec
org.gnome.desktop.background
schéma et l'une de ses clés, picture-uri
.
URI, que file:///home/JohnDoe/Pictures/cool_wallpaper.png
, correspond à identificateur de ressource uniforme , créé à l'origine pour une utilisation Internet, mais il existe un système URI , ce que nous voyons ici. Ce qui est bien avec URI, c’est qu’il donne un chemin codé en octets si vous utilisez des paramètres régionaux autres que l’anglais, par exemple avec mon bureau chinois, j’ai l’URI suivant pour mon motif: 'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Script avec gsettings
Bien sûr, écrire la commande à chaque fois est fastidieux et vous pouvez utiliser un peu de magie de script. Par exemple, voici ce que j’ai défini dans mon ~/.bashrc
pour pouvoir changer de fond à volonté:
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
}
Cette fonction peut être appelée avec un chemin absolu tel que
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
ou avec le chemin relatif du répertoire de travail actuel
change_background Pictures/cool_wallpaper.jpg
Il vérifie également si le fichier existe et résout les liens symboliques. Ceci peut être utilisé dans un script shell ou en tant que fonction autonome pour une utilisation quotidienne.
Bien sûr, ce n’est pas le seul moyen. Python a une API pour Gio (qui est la bibliothèque principale derrière gsettings
). J'ai écrit les fonctions gsettings_get
et gsettings_set
, qui étaient très utiles pour d'autres projets tels que Indicateur de liste de lanceurs . En cas de définition d'un fond, il peut également être utilisé et je l'ai utilisé récemment pour cette question . Voici une version simplifiée de cette même approche:
#!/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()
Bien sûr, les mêmes règles que pour les scripts s'appliquent ici aussi: assurez-vous qu'il soit exécutable avec chmod +x set_wallpaper.py
et stockez-le dans (de préférence) ~/bin
dossier. L'utilisation est simple: ./set_wallpaper.py Picture/cool_image.py
Le code source de ce script est également disponible sur mon référentiel GitHub avec beaucoup d'autres scripts aussi.