254 lines
7.8 KiB
Markdown
254 lines
7.8 KiB
Markdown
# 🖼️ Wallpaper Daemon
|
||
|
||
Служба для автоматической смены обоев рабочего стола в зависимости от времени суток.
|
||
|
||
## 📋 Возможности
|
||
|
||
- 🌅 **Автоматическая смена обоев** — установка разных обоев для разных периодов дня
|
||
- 🎨 **Смена темы GNOME** — автоматическое переключение светлой/тёмной темы
|
||
- ⏰ **Гибкое расписание** — настройка времени смены обоев через JSON
|
||
- 🔧 **Systemd-служба** — интеграция с systemd для автоматического запуска
|
||
- 📝 **Логирование** — запись всех событий в лог
|
||
|
||
## 🚀 Требования
|
||
|
||
- Python 3.13+
|
||
- Linux с GNOME и systemd
|
||
- Установленные пакеты:
|
||
|
||
```bash
|
||
sudo apt install python3-pip python3-venv rsync
|
||
```
|
||
|
||
- Библиотеки Python (стандартные, установка не требуется):
|
||
|
||
```
|
||
subprocess, os, json, sys, signal, logging, datetime
|
||
```
|
||
|
||
## 📖 Использование
|
||
|
||
### Быстрый старт
|
||
|
||
**Однократная установка обоев:**
|
||
|
||
```bash
|
||
python wallpaper_handle.py
|
||
```
|
||
|
||
**Запуск демона (вручную):**
|
||
|
||
```bash
|
||
python wallpaper_daemon.py
|
||
```
|
||
|
||
### Управление через systemd
|
||
|
||
| Действие | Команда |
|
||
|----------|---------|
|
||
| Установка службы | `sudo ./install_service.sh` |
|
||
| Включение службы | `systemctl --user enable wallpaper-daemon.service` |
|
||
| Запуск службы | `systemctl --user start wallpaper-daemon.service` |
|
||
| Остановка службы | `systemctl --user stop wallpaper-daemon.service` |
|
||
| Проверка статуса | `systemctl --user status wallpaper-daemon.service` |
|
||
| Удаление службы | `sudo ./uninstall_service.sh` |
|
||
|
||
## ⏰ Расписание смены обоев
|
||
|
||
| Время суток | Период | Обои | Тема |
|
||
|-------------|--------|------|------|
|
||
| 🌙 Ночь | 00:00 - 07:59 | `night.jpg` | 🌑 Тёмная |
|
||
| 🌅 Утро | 08:00 - 11:59 | `morning.jpg` | ☀️ Светлая |
|
||
| ☀️ День | 12:00 - 15:59 | `day.jpg` | ☀️ Светлая |
|
||
| 🌆 Вечер | 16:00 - 19:59 | `evening.jpg` | ☀️ Светлая |
|
||
| 🌃 Перед ночью | 20:00 - 23:59 | `before_night.jpg` | 🌑 Тёмная |
|
||
|
||
## ⚙️ Настройки
|
||
|
||
Файл `settings.json` в корне проекта:
|
||
|
||
```json
|
||
{
|
||
"night": {
|
||
"time": ["0:0", "7:59"],
|
||
"theme": "dark",
|
||
"file": "night.jpg"
|
||
},
|
||
"morning": {
|
||
"time": ["8:0", "11:59"],
|
||
"theme": "light",
|
||
"file": "morning.jpg"
|
||
},
|
||
"day": {
|
||
"time": ["12:0", "15:59"],
|
||
"theme": "light",
|
||
"file": "day.jpg"
|
||
},
|
||
"evening": {
|
||
"time": ["16:0", "19:59"],
|
||
"theme": "light",
|
||
"file": "evening.jpg"
|
||
},
|
||
"before_night": {
|
||
"time": ["20:0", "23:59"],
|
||
"theme": "dark",
|
||
"file": "before_night.jpg"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Параметры
|
||
|
||
| Параметр | Описание |
|
||
|----------|----------|
|
||
| `time` | Период времени в формате `["часы:минуты", "часы:минуты"]` |
|
||
| `theme` | Тема GNOME: `light` или `dark` |
|
||
| `file` | Имя файла обоев в папке `wallpapers/` |
|
||
|
||
## 📂 Структура проекта
|
||
|
||
```
|
||
wallpaper-daemon/
|
||
├── wallpaper_daemon.py # Основной демон (фоновый режим)
|
||
├── wallpaper_handle.py # Однократная установка обоев
|
||
├── settings.json # Конфигурация расписания
|
||
├── install_service.sh # Скрипт установки systemd-службы
|
||
├── uninstall_service.sh # Скрипт удаления systemd-службы
|
||
├── wallpaper-daemon.service # Unit-файл systemd
|
||
├── README.md
|
||
├── LICENSE
|
||
├── .gitignore
|
||
└── wallpapers/
|
||
├── morning.jpg # Утренние обои
|
||
├── day.jpg # Дневные обои
|
||
├── evening.jpg # Вечерние обои
|
||
├── before_night.jpg # Обои перед ночью
|
||
└── night.jpg # Ночные обои
|
||
```
|
||
|
||
## 🔧 Установка службы
|
||
|
||
### Автоматическая установка
|
||
|
||
```bash
|
||
sudo ./install_service.sh
|
||
```
|
||
|
||
Скрипт:
|
||
1. Копирует файлы в `~/.local/share/wallpaper-daemon`
|
||
2. Устанавливает службу в `/etc/systemd/user`
|
||
3. Включает linger для пользователя
|
||
|
||
> **Примечание:** После установки службы нужно включить и запустить её от имени пользователя:
|
||
> ```bash
|
||
> systemctl --user enable wallpaper-daemon.service
|
||
> systemctl --user start wallpaper-daemon.service
|
||
> ```
|
||
|
||
### Переустановка
|
||
|
||
Если служба была установлена неправильно (например, в `/root/.local/...`):
|
||
|
||
```bash
|
||
# Удалить старую службу
|
||
sudo ./uninstall_service.sh
|
||
|
||
# Установить заново
|
||
sudo ./install_service.sh
|
||
|
||
# Включить и запустить
|
||
systemctl --user enable wallpaper-daemon.service
|
||
systemctl --user start wallpaper-daemon.service
|
||
```
|
||
|
||
### Ручная установка
|
||
|
||
```bash
|
||
# Создать директорию
|
||
mkdir -p ~/.local/share/wallpaper-daemon
|
||
|
||
# Скопировать файлы (без скриптов установки)
|
||
rsync -av --exclude='install_service.sh' --exclude='uninstall_service.sh' ./ ~/.local/share/wallpaper-daemon/
|
||
|
||
# Скопировать unit-файл
|
||
sudo cp wallpaper-daemon.service /etc/systemd/user/
|
||
|
||
# Перезагрузить демон
|
||
sudo systemctl daemon-reload
|
||
|
||
# Включить linger
|
||
loginctl enable-linger $USER
|
||
|
||
# Включить и запустить службу
|
||
systemctl --user enable wallpaper-daemon.service
|
||
systemctl --user start wallpaper-daemon.service
|
||
```
|
||
|
||
## 🛠️ Устранение неполадок
|
||
|
||
### Служба не запускается
|
||
|
||
**Проверьте статус:**
|
||
|
||
```bash
|
||
systemctl --user status wallpaper-daemon.service
|
||
```
|
||
|
||
**Посмотрите детальные логи:**
|
||
|
||
```bash
|
||
journalctl --user -u wallpaper-daemon.service -n 100 --no-pager
|
||
```
|
||
|
||
**Просмотр логов в реальном времени:**
|
||
|
||
```bash
|
||
journalctl --user -u wallpaper-daemon.service -f
|
||
```
|
||
|
||
### Обои не меняются
|
||
|
||
1. **Проверьте наличие файлов:**
|
||
|
||
```bash
|
||
ls -la ~/.local/share/wallpaper-daemon/wallpapers/
|
||
```
|
||
|
||
2. **Убедитесь, что GNOME активен:**
|
||
|
||
```bash
|
||
gsettings get org.gnome.desktop.background picture-uri
|
||
```
|
||
|
||
3. **Проверьте переменные окружения:**
|
||
|
||
```bash
|
||
echo $DISPLAY
|
||
echo $DBUS_SESSION_BUS_ADDRESS
|
||
```
|
||
|
||
### Ошибки в логах
|
||
|
||
| Ошибка | Решение |
|
||
|--------|---------|
|
||
| `Файл не найден` | Проверьте наличие обоев в папке `wallpapers/` |
|
||
| `gsettings: не удалось открыть` | Убедитесь, что GNOME запущен |
|
||
| `Permission denied` | Проверьте права доступа к файлам |
|
||
|
||
## 🎨 Добавление своих обоев
|
||
|
||
1. Поместите изображения в папку `wallpapers/`
|
||
2. Отредактируйте `settings.json`:
|
||
- Измените `file` на имя вашего файла
|
||
- Настройте `time` для нужного периода
|
||
- Выберите `theme` (`light` или `dark`)
|
||
3. Перезапустите службу:
|
||
|
||
```bash
|
||
systemctl --user restart wallpaper-daemon.service
|
||
```
|
||
|
||
---
|
||
|
||
**сделано: s13bby**
|