Comment changer le fond d'écran de la ligne de commande dans Unity?
63
J'ai un script qui met à jour mon fond d'écran tous les jours avec l'APOD de la NASA. Depuis la mise à niveau vers 11.10, ce script a cessé de fonctionner, probablement parce que je me sers gconftool-2de mettre à jour le fond du bureau. Y at-il une nouvelle façon de faire cela sous Unity?
Unity et Gnome Shell (Gnome 3) utilisent maintenant GSettings au lieu de GConf. Donc, dans Unity et Gnome Shell, vous pouvez utiliser l'outil de ligne de commande gsettingspour cela. Par exemple gconftool, il vous permet d’obtenir ou de définir une clé individuelle.
Vous pouvez obtenir l'URI actuel de l'image d'arrière-plan comme suit:
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
Et définissez l’URI d’arrière-plan comme suit (qui mettra immédiatement à jour l’arrière-plan de votre bureau):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
Notez que vous devez ajouter l'URI avec "fichier: //" pour que cela fonctionne (contrairement à avec gconftool).
Pour que votre script fonctionne avec Gnome 2 et Shell / Unity, vous pouvez le laisser effectuer une vérification de la version de Gnome:
gnome-session --version
Cela renverra la version de Gnome. Si le numéro de version commence par 3, vous gsettingspouvez l'utiliser. S'il renvoie une version commençant par 2, laissez votre script utiliser à la gconftoolplace.
J'ai utilisé cette commande dans Ubuntu 12.04 et le système est
2
@YumYumYum: Il est très inhabituel que les commandes ci-dessus plantent votre système, sauf s’il se passe autre chose.
Serrano
Vous pouvez ajouter Cinnamon à la liste des environnements de bureau à l'aide de gsettings;)
MrVaykadji
Notez que vous devez ajouter l'URI avec "file: //" pour que cela fonctionne (contrairement à gconftool). <- Ceci est important! Je n'ai pas trouvé cela mentionné explicitement ailleurs.
Tom
2
Cela convient très bien à l'utilisateur actuellement connecté. J'aimerais savoir comment modifier par programmation le fond d'écran d' un autre utilisateur! J'ai essayé sudo --user = <nom d'utilisateur> gsettings ... mais cela a échoué.
Kaiwan
12
Ce code modifie de manière aléatoire le papier peint d'un répertoire donné.
Le répertoire de papier peint ne doit contenir que des fichiers de papier peint et aucun répertoire.
loxaxs
gsettings ne fonctionnera pas avec cron, cependant. vous devez définir la variable d'environnement DBUS_SESSION_BUS_ADDRESS pour que gsettings fonctionne. Vous pouvez le faire en ajoutant ces deux lignes avant gsettings (lignes séparées par des points-virgules :) PID = $ (pgrep gnome-session); export DBUS_SESSION_BUS_ADDRESS = $ (grep -z DBUS_SESSION_BUS_ADDRESS / proc / $ PID / environ | cut -d = -f2-);
willbradley
6
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 manière de définir un arrière-plan dans Ubuntu. Cette réponse est ma tentative de documenter le mieux possible ce que j’ai appris jusqu’à présent et elle est faite dans l’espoir que ce matériel puisse ê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 vs Bureau nu 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 le fond pour cette fenêtre spéciale de Nautilus. Lorsque vous désactivez les icônes du bureau avec
gsettings set org.gnome.desktop.background show-desktop-icons false
cela tuerait le bureau Nautilus et vous montrerait un bureau X épuré. Pour le bureau X nu, vous pouvez utiliser le fehprogramme. En particulier, cette commande:
Il y a aussi autre GUI que, nitrogen. Les approches fehet nitrogenpeuvent être utilisées avec des ordinateurs de bureau autres que Unity, tels que openboxou blackbox. Cette gsettingsapproche peut être utilisée avec Unity ou un autre bureau basé sur GNOME.
Désactivation de la commande gsettings
Que fait exactement la gsettingscommande? Eh bien, tout d’abord, il existe une base de données dconf de paramètres pour chaque utilisateur, destinée à remplacer le GConf obsolète , et elle est accessible via la dconfcommande ou gsettings. En particulier, nous avons affaire ici avec
le org.gnome.desktop.backgroundschéma et l' une de ses clés, picture-uri.
URI, qui file:///home/JohnDoe/Pictures/cool_wallpaper.pngsignifie en fait Uniform Resource Identifier , qui a été créé à l'origine pour une utilisation Internet, mais il existe un schéma d' URI de fichier , qui correspond à 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 on peut utiliser un peu de magie de script. Par exemple, voici ce que j'ai défini dans mon ~/.bashrcafin de 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
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. Cela 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 un gsettings_getet les gsettings_setfonctions, qui étaient très utiles pour d'autres projets tels que Launcher List Indicator . 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 importGioimport os,sys,randomdef gsettings_set(schema, path, key, value):"""Set value of gsettings schema"""if path isNone:
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')ifnot 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 s'appliquent aux scripts: assurez-vous qu’il est rendu exécutable chmod +x set_wallpaper.pyet stockez-le dans un ~/bindossier (de préférence) . L'utilisation est simple: le ./set_wallpaper.py Picture/cool_image.py code source de ce script est également disponible sur mon référentiel GitHub avec de nombreux autres scripts.
Grâce à la réponse impressionnante de Serrano, j'ai pu écrire ce script que j'utilise dans le cadre de mes nouveaux scripts de configuration de machine pour définir un arrière-plan noir:
Ce code modifie de manière aléatoire le papier peint d'un répertoire donné.
Sauvegardez ce script et éditez-le avec la commande "crontab -e" (il lance un éditeur dans lequel vous mettez cette ligne à la fin du fichier):
la source
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 manière de définir un arrière-plan dans Ubuntu. Cette réponse est ma tentative de documenter le mieux possible ce que j’ai appris jusqu’à présent et elle est faite dans l’espoir que ce matériel puisse ê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
Définition de l'arrière-plan dans Unity vs Bureau nu 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
qui définit le fond pour cette fenêtre spéciale de Nautilus. Lorsque vous désactivez les icônes du bureau avec
cela tuerait le bureau Nautilus et vous montrerait un bureau X épuré. Pour le bureau X nu, vous pouvez utiliser le
feh
programme. En particulier, cette commande:Il y a aussi autre GUI que,
nitrogen
. Les approchesfeh
etnitrogen
peuvent être utilisées avec des ordinateurs de bureau autres que Unity, tels queopenbox
oublackbox
. Cettegsettings
approche peut être utilisée avec Unity ou un autre bureau basé sur GNOME.Désactivation de la commande gsettings
Que fait exactement la
gsettings
commande? Eh bien, tout d’abord, il existe une base de données dconf de paramètres pour chaque utilisateur, destinée à remplacer le GConf obsolète , et elle est accessible via ladconf
commande ougsettings
. En particulier, nous avons affaire ici avec leorg.gnome.desktop.background
schéma et l' une de ses clés,picture-uri
.URI, qui
file:///home/JohnDoe/Pictures/cool_wallpaper.png
signifie en fait Uniform Resource Identifier , qui a été créé à l'origine pour une utilisation Internet, mais il existe un schéma d' URI de fichier , qui correspond à 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 on peut utiliser un peu de magie de script. Par exemple, voici ce que j'ai défini dans mon
~/.bashrc
afin de pouvoir changer de fond à volonté:Cette fonction peut être appelée avec un chemin absolu tel que
ou avec le chemin relatif du répertoire de travail actuel
Il vérifie également si le fichier existe et résout les liens symboliques. Cela 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 ungsettings_get
et lesgsettings_set
fonctions, qui étaient très utiles pour d'autres projets tels que Launcher List Indicator . 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:Bien sûr, les mêmes règles s'appliquent aux scripts: assurez-vous qu’il est rendu exécutable
chmod +x set_wallpaper.py
et stockez-le dans un~/bin
dossier (de préférence) . L'utilisation est simple: le./set_wallpaper.py Picture/cool_image.py
code source de ce script est également disponible sur mon référentiel GitHub avec de nombreux autres scripts.la source
Grâce à la réponse impressionnante de Serrano, j'ai pu écrire ce script que j'utilise dans le cadre de mes nouveaux scripts de configuration de machine pour définir un arrière-plan noir:
la source
Aussi, vous pouvez utiliser ceci:
la source