web-dev-qa-db-fra.com

Changer le fond d'écran selon l'heure actuelle

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.

2
alexj123

Changez les fonds d'écran en fonction du jour et de la nuit aussi simplement que possible

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.

  • De même, pendant la nuit, définissez votre papier peint préféré pour la nuit. Encore une fois, le script se souvient.

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.

Si le script est arrêté

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).

Charge du processeur zéro

Lorsque le script est lancé, il calcule:

  • l'heure actuelle du jour
  • la période de nuit et de jour
  • le laps de temps entre l'heure actuelle du jour et le premier changement
  • le terme actuel (jour ou nuit)

Après cela, entre les changements de papier peint, le script seulement dort

ce que fait le script

enter image description here

Le scénario

#!/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)

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom wallpaper_shift.py
  2. 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

  3. Dans n'importe lequel des deux termes, définissez simplement le fond d'écran comme vous le souhaitez, le script s'en souvient et le réapplique le "jour" ou la "nuit" suivant.
  4. 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"
    

Remarques

  1. Le script fonctionne correctement si la soirée commence entre 00h00 et se termine après minuit. Cela semble cependant évident.
  2. Le script arrondit le temps en minutes , ce qui signifie que la précision est également comprise entre 0 et 60 secondes.
4
Jacob Vlijm

Vous pouvez essayer Automatic Desktop Wallpaper Changer . C'est assez simple à utiliser.

2
incBrain

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.

0
Edgar Naser