Alterar papel de parede por hora atual

2

Durante a personalização do meu Ubuntu, eu pensei ter dois papéis de parede, um para o dia / tarde e outro para a noite / noite.

É possível alterar o papel de parede com base na hora atual? Se sim, como posso?

Obrigado antecipadamente.

    
por alexj123 25.01.2016 / 19:24

3 respostas

4

Alterar papéis de parede de acordo com o dia & amp; noite tão simples quanto possível

Assumindo que a noite começa em algum lugar após 12:00 e termine após meia-noite às 24:00, o uso do script abaixo é simples:

  • Execute-o em segundo plano com o comando:

    python3 <script> <begin_of_evening> <end_of_night>
    

    por exemplo:

    python3 /path/to/wallpaper_shift.py 19:00 6:00
    
  • Durante o turno diurno, defina o papel de parede como preferir. O script lembra sua escolha no turno do dia seguinte.

  • Da mesma forma, durante o turno da noite, defina seu papel de parede preferido para a noite. Mais uma vez, o script lembra.

Isso é tudo. Agora o papel de parede mudará de acordo com os momentos do dia que você definiu, executando o script.

Se o script estiver parado

O script lembra os papéis de parede definidos em um arquivo oculto: ~/.wallset . Quando o script é (re) iniciado, ele primeiro tenta ler os papéis de parede no arquivo. se não existir, cria um novo arquivo, usando o papel de parede atualmente definido para o turno diurno e noturno, até que você altere qualquer um (ou ambos).

Carga do processador zero

Quando o script é iniciado, calcula:

  • a hora atual do dia
  • o intervalo de tempo do turno da noite e do dia
  • o intervalo de tempo da hora atual do dia até a primeira mudança
  • o termo atual (dia ou noite)

Depois disso, entre o papel de parede muda, o script só dorme

o que o script faz

Oscript

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

Como usar

  1. Copie o script em um arquivo vazio, salve-o como wallpaper_shift.py
  2. Teste- execute-o a partir de um terminal pelo comando (exemplo):

    python3 /path/to/wallpaper_shift.py 19:00 6:00
    

    em que o formato da hora deve ser 20:00

  3. Em qualquer um dos dois termos, basta definir o papel de parede como quiser, o script lembra e o aplica novamente no próximo "dia" ou "noite".
  4. Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    /bin/bash -c "sleep 20 && python3 /path/to/wallpaper_shift.py 19:00 6:00"
    

Notas

  1. O script funciona corretamente se a noite for iniciada entre 12:00 e termina após meia-noite. Isso parece óbvio.
  2. O script arredonda o tempo em minutos , o que significa que a precisão também está entre 0 e 60 segundos.
por Jacob Vlijm 26.01.2016 / 16:46
2

Você pode experimentar o Automatic Desktop Wallpaper Changer . É bem simples de usar.

    
por incBrain 25.01.2016 / 19:29
0

Eu percebo que você quer fazer isso sozinho, mas por que reinventar a roda

Basta executar:

sudo apt-get instalar wallch

e configure conforme necessário.

    
por Edgar Naser 26.01.2016 / 18:59