J'ai appris à changer l'arrière-plan via le terminal, mais puis-je faire en sorte que le terminal change d'arrière-plan à chaque fois que je me connecte ?
Réponse
Trop de publicités?Introduction
Le script ci-dessous prend un répertoire en argument (contenant de préférence uniquement des images), sélectionne un élément aléatoire dans son contenu, et le définit comme fond d'écran. Il est destiné à être lancé lors de la connexion de l'utilisateur, bien qu'il puisse être utilisé tout seul tout aussi bien.
Mise en place et utilisation
Tout d'abord, le script doit être stocké quelque part sur le système. De préférence, il doit être placé dans le fichier ~/bin
répertoire. Si vous n'avez pas bin
dans votre répertoire personnel, alors créez-en un.
Ensuite, assurez-vous que le script a les droits d'exécution. Vous pouvez utiliser soit chmod +x ~/bin/set_random_wallpaper.py
ou le faire à la manière de l'interface graphique en faisant un clic droit sur le fichier et en vérifiant Allow executing file as program
dans l'onglet Permissions du menu Propriétés.
Le script requiert un répertoire comme argument. De préférence, vous devriez lui donner le chemin complet. Par exemple :
set_random_wallpaper.py /home/JohnDoe/Pictures/wallpapers/
Si vous le faites via la ligne de commande, alors vous pouvez donner un chemin relatif, Pictures/wallpapers/
mais pour le configurer afin qu'il s'exécute automatiquement à la connexion, utilisez le chemin complet.
Pour que le fichier soit exécuté à chaque connexion, ouvrez le programme Startup Applications et cliquez sur le bouton "Add". Utilisez le chemin complet de la commande et du dossier :
/home/JohnDoe/bin/set_random_wallpaper.py /home/JohnDoe/Pictures/wallpapers/
C'est ça !
script Source
Le script est aussi disponible sur GitHub :
#!/usr/bin/env python3
"""
Author: Serg Kolo , <1047481448@qq.com>
Date: December, 21,2016
Purpose: Sets random wallpaper from a given directory
Written for: https://askubuntu.com/q/851705/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 select_random_uri(dir_path):
selection = random.choice(os.listdir(dir_path))
selection_path = os.path.join(dir_path,selection)
while not os.path.isfile(selection_path):
selection = random.choice(os.listdir(dir_path))
selection_path = os.path.join(dir_path,selection)
selection_uri = Gio.File.new_for_path(selection_path).get_uri()
return selection_uri
def main():
""" Program entry point"""
if len(sys.argv) != 2:
error_and_exit('>>> Script requires path to a directory as single argument')
if not os.path.isdir(sys.argv[1]):
error_and_exit('>>> Argument is not a directory')
img_dir = os.path.abspath(sys.argv[1])
uri = select_random_uri(img_dir)
try:
gsettings_set('org.gnome.desktop.background',None,'picture-uri',uri)
except Exception as ex:
error_and_exit(ex.repr())
if __name__ == '__main__': main()
Détails techniques et théorie du fonctionnement
Le script lui-même fonctionne de manière assez simple, mais je l'ai épicé avec quelques fonctions de mon cru. La fonction principale vérifie s'il y a un argument et si cet argument est un répertoire - sinon elle s'arrête. Si tout est OK, nous récupérons le chemin absolu du répertoire, et le donnons à set_random_uri()
fonction.
Comme vous le savez peut-être ou pas, le fond d'écran se déroule dans dconf
à laquelle on peut accéder et qu'il est possible de modifier avec gsettings
commande. La méthode simple en ligne de commande est la suivante
gsettings set org.gnome.desktop.background picture-uri file:///home/JohnDoe/Pictures/cool_wallpaper.jpg
El file://...
est l'URI du fichier (qui est essentiellement un chemin d'accès codé du fichier, et est très utile si votre système utilise une autre locale que l'anglais). Tout d'abord, nous devons sélectionner un fichier aléatoire et obtenir son URI. C'est simple - nous utilisons random.choice()
pour sélectionner dans la liste et os.listdir()
pour obtenir la liste des éléments du répertoire. Et si notre sélection aléatoire se trouve être un répertoire et non un fichier ? Eh bien, c'est à cela que sert la boucle while dans select_random_uri
. Une fois que nous sommes satisfaits de la sélection, nous obtenons sa
Eh bien, à partir de là, c'est à peu près la même chose que ce qui se passe dans gsettings set
mais j'utilise une commande personnalisée. gsettings_set()
évitant ainsi d'appeler une commande externe, et elle s'est avérée utile pour d'autres projets, tels que Indicateur de la liste des lanceurs .
C'est ça ! Amusez-vous bien à coder et profitez d'Ubuntu de manière responsable !
Ressource supplémentaire
- La version Bash d'un tel script a déjà été implémentée auparavant, voir : https://askubuntu.com/a/744470/295286