В этой статье мы расскажем, как создать 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
Основной скрипт выполняет следующие задачи:
- Получает случайное изображение с Wallhaven.
- Скачивает его на локальный диск.
- Устанавливает изображение как обои рабочего стола.
Вот полный код 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 Настройка горячей клавиши
- Откройте “Настройки” → “Клавиатура” → “Пользовательские сочетания клавиш”.
- Добавьте новую команду:
- Название: Например, “Сменить обои”.
- Команда:
/путь/к/вашему/run_wallpaper.sh
. - Комбинация клавиш: Например,
Ctrl + Alt + W
.
Теперь, нажимая назначенную комбинацию клавиш, вы сможете менять обои.
Шаг 5: Автоматическая смена обоев (опционально)
Если вы хотите, чтобы обои менялись автоматически через определённые промежутки времени, добавьте задачу в планировщик cron
:
crontab -e
Добавьте строку:
*/30 * * * * /путь/к/вашему/run_wallpaper.sh
Это запустит скрипт каждые 30 минут.
Заключение
Теперь у вас есть полностью функциональный скрипт для автоматической смены обоев рабочего стола. Вы можете запускать его вручную, по горячей клавише или настроить автоматическую смену через cron
. Этот проект можно расширять, добавляя новые функции, такие как графический интерфейс, поддержка других разрешений или категорий изображений.
Удачи в использовании ваших новых обоев! 🎨✨