Создание скрипта для автоматической смены обоев

В этой статье мы расскажем, как создать Python-скрипт, который будет автоматически загружать случайные обои с популярного сервиса Wallhaven и устанавливать их в качестве фона рабочего стола в GNOME. Мы также покажем, как настроить запуск скрипта по нажатию горячей клавиши.


Шаг 1: Подготовка среды

1.1 Установка необходимых зависимостей

Для работы скрипта потребуются следующие инструменты:

  • Python 3 (обычно предустановлен в Linux).
  • Библиотека requests для выполнения HTTP-запросов.
  • Доступ к API Wallhaven (регистрация и получение API-ключа).

Установите библиотеку requests, если она ещё не установлена:

pip install requests

1.2 Создание структуры проекта

Создайте папку для вашего проекта, например:

mkdir ~/WallpaperChanger
cd ~/WallpaperChanger

Внутри папки создайте два файла:

  • config.py — для хранения API-ключа.
  • run.py — основной скрипт.

Шаг 2: Написание скрипта

2.1 Файл config.py

Этот файл будет содержать ваш API-ключ от Wallhaven. Создайте файл config.py:

# config.py
WALLHAVEN_API_KEY = "ваш_api_ключ"

2.2 Файл run.py

Основной скрипт выполняет следующие задачи:

  1. Получает случайное изображение с Wallhaven.
  2. Скачивает его на локальный диск.
  3. Устанавливает изображение как обои рабочего стола.

Вот полный код run.py:

import os
import random
import requests
from pathlib import Path
from config import WALLHAVEN_API_KEY  # Импортируем API-ключ

# Настройки
WALLHAVEN_API_URL = "https://wallhaven.cc/api/v1/search"
DOWNLOAD_DIR = Path("/home/gratz/Изображения/Wallheaven")  # Каталог для сохранения обоев
GNOME_WALLPAPER_SCHEMA = "org.gnome.desktop.background"
GNOME_WALLPAPER_KEY = "picture-uri-dark"  # Или "picture-uri" для светлой темы

# Создание директории для скачивания, если её нет
os.makedirs(DOWNLOAD_DIR, exist_ok=True)

def get_random_wallpaper():
    """Получает случайное изображение с Wallhaven."""
    params = {
        "apikey": WALLHAVEN_API_KEY,
        "sorting": "random",  # Случайная сортировка
        "categories": "111",  # Все категории (general, anime, games)
        "purity": "100",      # Только SFW (без NSFW контента)
        "resolutions": "1920x1080",  # Разрешение 1920x1080
        "q": "games",         # Поиск по тегу "games"
        "page": random.randint(1, 10),  # Случайная страница
    }
    response = requests.get(WALLHAVEN_API_URL, params=params)
    if response.status_code != 200:
        print("Не удалось получить данные с Wallhaven.")
        return None

    data = response.json()
    wallpapers = data.get("data", [])
    if not wallpapers:
        print("Нет доступных обоев.")
        return None

    # Выбираем случайное изображение
    wallpaper = random.choice(wallpapers)
    return wallpaper["path"]

def download_wallpaper(url):
    """Скачивает изображение по URL."""
    try:
        response = requests.get(url, stream=True)
        if response.status_code != 200:
            print("Не удалось скачать изображение.")
            return None

        # Генерируем имя файла
        filename = url.split("/")[-1]
        filepath = DOWNLOAD_DIR / filename

        # Сохраняем файл
        with open(filepath, "wb") as f:
            for chunk in response.iter_content(1024):
                f.write(chunk)
        print(f"Изображение сохранено: {filepath}")
        return filepath
    except Exception as e:
        print(f"Ошибка при скачивании: {e}")
        return None

def set_gnome_wallpaper(filepath):
    """Устанавливает обои в GNOME."""
    try:
        # Преобразуем путь к файлу в URI
        file_uri = f"file://{filepath}"
        os.system(f"gsettings set {GNOME_WALLPAPER_SCHEMA} {GNOME_WALLPAPER_KEY} '{file_uri}'")
        print("Обои успешно установлены!")
    except Exception as e:
        print(f"Ошибка при установке обоев: {e}")

def main():
    print("Получение случайных обоев с Wallhaven...")
    wallpaper_url = get_random_wallpaper()
    if not wallpaper_url:
        print("Не удалось получить обои.")
        return

    print(f"Скачивание обоев: {wallpaper_url}")
    wallpaper_path = download_wallpaper(wallpaper_url)
    if not wallpaper_path:
        print("Не удалось скачать обои.")
        return

    print("Установка обоев...")
    set_gnome_wallpaper(wallpaper_path)

if __name__ == "__main__":
    main()

Шаг 3: Тестирование скрипта

Запустите скрипт вручную, чтобы убедиться, что он работает:

python3 run.py

Если всё настроено правильно, вы увидите сообщение об успешной установке обоев.


Шаг 4: Настройка запуска по горячей клавише

4.1 Создание исполняемого файла .sh

Чтобы запускать скрипт одной командой, создайте файл run_wallpaper.sh:

#!/bin/bash
# Активируем виртуальное окружение (если оно используется)
source /путь/к/вашему/.venv/bin/activate

# Запускаем Python-скрипт
python3 /путь/к/вашему/run.py

Добавьте права на выполнение:

chmod +x run_wallpaper.sh

Теперь вы можете запускать скрипт командой:

/путь/к/вашему/run_wallpaper.sh

4.2 Настройка горячей клавиши

  1. Откройте “Настройки” → “Клавиатура” → “Пользовательские сочетания клавиш”.
  2. Добавьте новую команду:
    • Название: Например, “Сменить обои”.
    • Команда: /путь/к/вашему/run_wallpaper.sh.
    • Комбинация клавиш: Например, Ctrl + Alt + W.

Теперь, нажимая назначенную комбинацию клавиш, вы сможете менять обои.


Шаг 5: Автоматическая смена обоев (опционально)

Если вы хотите, чтобы обои менялись автоматически через определённые промежутки времени, добавьте задачу в планировщик cron:

crontab -e

Добавьте строку:

*/30 * * * * /путь/к/вашему/run_wallpaper.sh

Это запустит скрипт каждые 30 минут.


Заключение

Теперь у вас есть полностью функциональный скрипт для автоматической смены обоев рабочего стола. Вы можете запускать его вручную, по горячей клавише или настроить автоматическую смену через cron. Этот проект можно расширять, добавляя новые функции, такие как графический интерфейс, поддержка других разрешений или категорий изображений.

Удачи в использовании ваших новых обоев! 🎨✨

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *