Lors de la personnalisation de mon Ubuntu, je pensais avoir deux fonds d'écran, l'un pour le jour/l'après-midi et l'autre pour le soir/la nuit.
Est-il possible de changer le fond d'écran en me basant sur l'heure actuelle? Si oui, comment puis-je?
Merci d'avance.
En supposant que la nuit commence quelque part après 12h00 et se termine après à minuit 24:00, l’utilisation du script ci-dessous est aussi simple que cela:
Exécutez-le en arrière-plan avec la commande:
python3 <script> <begin_of_evening> <end_of_night>
par exemple:
python3 /path/to/wallpaper_shift.py 19:00 6:00
Pendant le quart de jour, configurez le papier peint comme vous le souhaitez. Le script se souvient de votre choix lors du prochain quart de travail.
C'est tout. Maintenant, le papier peint changera en fonction du moment de la journée que vous avez défini, en exécutant le script.
Le script mémorise les fonds d'écran définis dans un fichier caché: ~/.wallset
. Lorsque le script est (re) lancé, il essaie d’abord de lire les fonds d’écran définis dans le fichier. s'il n'existe pas, il crée un nouveau fichier, en utilisant le papier peint actuellement défini pour les équipes de jour et de nuit, jusqu'à ce que vous changiez l'un (ou les deux).
Lorsque le script est lancé, il calcule:
Après cela, entre les changements de papier peint, le script seulement dort
ce que fait le script
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
def write_walls(prefsfile, walls):
# write new set of wallpapers to prefsfile
open(prefsfile, "wt").write(("\n").join(walls))
def set_wall(wall):
# set the wallapaper
new = wall.replace("night:", "").replace("day:", "")
command = "gsettings set org.gnome.desktop.background picture-uri "+\
new
subprocess.Popen(["/bin/bash", "-c", command])
def get_currwal():
# get the current wallpaper
return subprocess.check_output([
"/bin/bash", "-c",
"gsettings get org.gnome.desktop.background picture-uri"
]).decode("utf-8").strip()
def produce_setwalls(prefsfile):
# on startup of the script, try to read the set wallapapers
# or take the currently set on first run
try:
return open(prefsfile).read().splitlines()
except FileNotFoundError:
currwall = get_currwal()
newwalls = ["night:"+currwall, "day:"+currwall]
write_walls(prefsfile, newwalls)
return newwalls
def convert_tosecs(t):
# convert time of the day (hrs/mins) to seconds
t = [int(n) for n in t.split(":")]
return (3600*t[0])+(60*t[1])
# --- set constants
day_period = 24*3600
prefsfile = os.environ["HOME"]+"/.wallset"
# ---
# --- define time- shifts
curr_t = convert_tosecs(time.strftime("%H:%M"))
t1 = convert_tosecs(sys.argv[1])
t2 = convert_tosecs(sys.argv[2])
# ---
# --- define start- data
if any([curr_t > t1, curr_t < t2]):
curr_term = "night"
first_period = 86400 - curr_t + t2
else:
curr_term = "day"
first_period = t1 - curr_t
# ---
# --- define time spans
night_shift = 86400 - t1 + t2
day_shift = 86400 - night_shift
# ---
# run first term, set wallpaper according (possible) settings
set_wallpapers = produce_setwalls(prefsfile)
to_set = [wall for wall in set_wallpapers if curr_term in wall][0]
set_wall(to_set)
time.sleep(first_period)
# then start loop
while True:
if curr_term == "day":
new_daywall = "day:"+get_currwal()
sleeptime = night_shift
new_term = "night"
Elif curr_term == "night":
new_daywall = "night:"+get_currwal()
sleeptime = day_shift
new_term = "day"
toremove = [item for item in set_wallpapers if curr_term+":" in item][0]
# replace possibly changed wallpaper in the prefsfile and the currently
# used set of wallpapers
set_wallpapers.remove(toremove)
set_wallpapers.append(new_daywall)
write_walls(prefsfile, set_wallpapers)
# switch daytime <> night, set the wallpaper accordingly
curr_term = new_term
set_wall([item for item in set_wallpapers if new_term+":" in item][0])
# sleep again...
time.sleep(sleeptime)
wallpaper_shift.py
Testez-le depuis un terminal avec la commande (exemple):
python3 /path/to/wallpaper_shift.py 19:00 6:00
où le format de l'heure doit être 20:00
Si tout fonctionne correctement, ajoutez-le à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 20 && python3 /path/to/wallpaper_shift.py 19:00 6:00"
Vous pouvez essayer Automatic Desktop Wallpaper Changer . C'est assez simple à utiliser.
Je me rends compte que vous voulez le faire vous-même mais pourquoi réinventer la roue
Il suffit de lancer:
Sudo apt-get install wallch
et configurer au besoin.