Files
wallpaper_demon/wallpaper_handle.py
T

89 lines
3.0 KiB
Python
Raw Normal View History

2026-05-15 04:05:54 +06:00
from datetime import datetime
import subprocess
import os
import json
import sys
def get_settings():
base_dir = os.path.dirname(os.path.abspath(__file__))
path = os.path.join(base_dir, "settings.json")
try:
with open(path, "r", encoding="utf-8") as data:
return json.load(data)
except Exception:
print(f"Ошибка: Не удалось прочитать {path}")
sys.exit()
def get_current_time():
return [datetime.now().hour, datetime.now().minute]
def switch_theme(theme):
scheme = "prefer-dark" if theme == "dark" else "prefer-light"
cmd = ["gsettings", "set", "org.gnome.desktop.interface", "color-scheme", scheme]
try:
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
print(f"Ошибка при смене темы: {e}")
def choose_wallpaper(current_time, settings):
current_hours, current_minutes = current_time
for phase_name, data in settings.items():
start_hours, start_minutes = map(int, data["time"][0].split(':'))
end_hours, end_minutes = map(int, data["time"][1].split(':'))
if (start_hours, start_minutes) <= (current_hours, current_minutes) \
<= (end_hours, end_minutes):
return data["file"], data["theme"]
return "night.jpg", "dark"
def main():
settings = get_settings()
current_time = get_current_time()
image, theme = choose_wallpaper(current_time, settings)
switch_theme(theme)
set_wallpaper(image)
def set_wallpaper(image):
base_dir = os.path.dirname(os.path.abspath(__file__))
wallpaper_path = os.path.join(base_dir, "wallpapers", image)
if not os.path.exists(wallpaper_path):
print(f"ОШИБКА: Файл не найден: {wallpaper_path}")
return
uri = f"file://{wallpaper_path}"
try:
subprocess.run(
["gsettings", "set", "org.gnome.desktop.background", "picture-options", "zoom"],
check=True
)
except subprocess.CalledProcessError as e:
print(f"Ошибка при установке picture-options: {e}")
keys = [
("org.gnome.desktop.background", "picture-uri"),
("org.gnome.desktop.background", "picture-uri-dark"),
("org.gnome.desktop.screensaver", "picture-uri")
]
for schema, setting in keys:
command = ["gsettings", "set", schema, setting, f"'{uri}'"]
try:
subprocess.run(command, check=True)
print(f"Успешно: {setting} -> {image}")
except subprocess.CalledProcessError as e:
print(f"Ошибка: {e}")
try:
subprocess.run([
"gdbus", "call", "--session",
"--dest", "org.gnome.Shell",
"--object-path", "/org/gnome/Shell",
"--method", "org.gnome.Shell.Eval",
"imports.gi.Meta.BackgroundActor.get_for_screen(global.display.get_screen()).force_redraw()"
], check=False, capture_output=True)
except Exception:
pass
if __name__ == "__main__":
main()