Що саме ми автоматизуємо
Ми створимо один універсальний bash-скрипт, який уміє:
- перемикати світлу/темну тему в GNOME або KDE;
- регулювати яскравість екрану (через
brightnessctlабоddcutilдля зовнішніх моніторів); - запускатися за розкладом через systemd timers (аналог cron, але сучасніший і зручніший для користувацьких сесій).
Результат: наприклад, о 08:00 автоматично вмикається світла тема і 80% яскравості, а о 21:30 — темна тема і 30% яскравості. Звучить як маленьке диво, але це Linux, тож усе під контролем! ✨
Підготовка інструментів
Встановіть утиліти для керування яскравістю (приклади команд для Debian/Ubuntu; у Fedora використайте dnf, в Arch — pacman):
sudo apt update
sudo apt install brightnessctl ddcutil
Порада: для роботи brightnessctl інколи потрібно додати себе в групу video і перелогінитись:
sudo usermod -aG video $USER
How-to: створюємо скрипт і таймери systemd
1) Bash-скрипт перемикача теми та яскравості
Створіть файл ~/.local/bin/theme-switch.sh і зробіть його виконуваним. Це серце всієї магії bash скрипти.
mkdir -p ~/.local/bin
nano ~/.local/bin/theme-switch.sh
Вставте код:
#!/usr/bin/env bash
set -euo pipefail
DESKTOP="${XDG_CURRENT_DESKTOP:-${XDG_SESSION_DESKTOP:-}}"
set_theme() {
local mode="$1" # light|dark
if [[ "$DESKTOP" =~ GNOME ]]; then
if [[ "$mode" == "light" ]]; then
gsettings set org.gnome.desktop.interface color-scheme 'default'
else
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
fi
elif [[ "$DESKTOP" =~ KDE|PLASMA ]]; then
if command -v plasma-apply-colorscheme &>/dev/null; then
if [[ "$mode" == "light" ]]; then
plasma-apply-colorscheme Breeze || true
else
plasma-apply-colorscheme BreezeDark || true
fi
fi
if command -v lookandfeeltool &>/dev/null; then
if [[ "$mode" == "light" ]]; then
lookandfeeltool -a org.kde.breeze.desktop || true
else
lookandfeeltool -a org.kde.breezedark.desktop || true
fi
fi
fi
}
set_brightness() {
local value="$1" # відсоток, напр. 30
if command -v brightnessctl &>/dev/null; then
brightnessctl set "${value}%"
elif command -v ddcutil &>/dev/null; then
# Спроба встановити яскравість на всіх знайдених моніторах (VCP 0x10)
ddcutil detect | awk '/Display/ {print $NF}' | while read -r disp; do
ddcutil --display "$disp" setvcp 10 "$value" || true
done
fi
}
case "${1:-}" in
day)
set_theme light
set_brightness 80
;;
night)
set_theme dark
set_brightness 30
;;
*)
echo "Usage: $0 {day|night}"
exit 1
;;
esac
Надайте права на виконання:
chmod +x ~/.local/bin/theme-switch.sh
2) Користувацькі systemd-сервіси
Створіть два user-сервіси: денний та нічний. Це зручно поєднується з cron та systemd timers, але ми використовуємо саме systemd (краще інтегрований у GUI Linux-сесії).
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/theme-day.service
Вставте:
[Unit]
Description=Switch to day theme and brightness
After=graphical-session.target
[Service]
Type=oneshot
ExecStart=%h/.local/bin/theme-switch.sh day
І нічний:
nano ~/.config/systemd/user/theme-night.service
[Unit]
Description=Switch to night theme and brightness
After=graphical-session.target
[Service]
Type=oneshot
ExecStart=%h/.local/bin/theme-switch.sh night
3) Таймери за розкладом
Створіть таймери, які запускатимуть сервіси в заданий час. Змінюйте години під себе.
nano ~/.config/systemd/user/theme-day.timer
[Unit]
Description=Daily day theme switch at 08:00
[Timer]
OnCalendar=08:00
Persistent=true
Unit=theme-day.service
[Install]
WantedBy=timers.target
nano ~/.config/systemd/user/theme-night.timer
[Unit]
Description=Daily night theme switch at 21:30
[Timer]
OnCalendar=21:30
Persistent=true
Unit=theme-night.service
[Install]
WantedBy=timers.target
4) Активуємо
systemctl --user daemon-reload
systemctl --user enable --now theme-day.timer theme-night.timer
systemctl --user list-timers --all | grep theme-
Перевірте вручну:
systemctl --user start theme-night.service
# і
systemctl --user start theme-day.service
Альтернативні способи
- cron замість systemd timers: працює, але гірше інтегрований із користувацькою сесією (D-Bus). Тим не менш, якщо любите трюки Linux — можна.
- Тільки яскравість: використайте лише
brightnessctlабоddcutilу таймерах. - За світанком/заходом сонця: додайте
sunwaitабо скрипт, що обчислює час за геолокацією, й оновлює OnCalendar черезsystemd-run --user --on-calendar=....
GUI-спосіб (швидке налаштування)
- GNOME: Налаштування → Вигляд → перемикайте Light/Dark. Для розкладу — розширення “Night Theme Switcher” (extensions.gnome.org). Воно дозволяє вибрати часові діапазони і навіть вмикати теми іконок.
- KDE Plasma: System Settings → Appearance → Global Theme/Colors. Штатного планувальника тем немає, тому для розкладу зручніше використати наш підхід через systemd або сторонні скрипти.
- Нагадування: Night Light/Night Color регулюють температуру кольору, а не яскравість. Тому їх можна поєднати з нашим рішенням 🌙
FAQ
1) Команда gsettings не працює в таймері.
Переконайтеся, що це саме користувацький сервіс (шлях ~/.config/systemd/user, а не системний) і ви запускали через systemctl --user. Також переконайтеся, що GNOME встановлено (не мінімальний сервер) і ви працюєте в графічній сесії.
2) brightnessctl каже: Permission denied.
Додайте користувача в групу video: sudo usermod -aG video $USER, перелогіньтесь. Для зовнішніх моніторів через ddcutil може знадобитись група i2c і модуль ядра i2c-dev (sudo modprobe i2c-dev).
3) На Wayland XRandR не працює.
Саме тому ми використовуємо brightnessctl (через /sys/backlight) та ddcutil для DDC/CI — вони незалежні від XRandR.
4) У KDE не застосовується тема або застосовується частково.
Спробуйте і plasma-apply-colorscheme, і lookandfeeltool (у скрипті це вже враховано). Переконайтеся, що пакети Plasma повністю встановлені. Деякі застосунки можуть підхопити тему після перезапуску.
5) Як подивитися логи сервісів?
journalctl --user -u theme-day.service -b і journalctl --user -u theme-night.service -b. Це допоможе зловити помилки шляху або прав доступу.
6) Чи вплине перехід на літній/зимовий час?
Ні, OnCalendar використовує локальний час, systemd сам подбає про коректне спрацювання.
7) Чи не конфліктує з GNOME-розширеннями?
Якщо розширення теж перемикає тему за розкладом, можливі гонки. Вимкніть одне з рішень або поставте різний час.
Порада від Kernelka
Перш ніж автоматизувати, вручну перевірте команди. Запустіть:
~/.local/bin/theme-switch.sh night
~/.local/bin/theme-switch.sh day
Якщо яскравість занадто різко стрибає — підкоригуйте значення (наприклад, 70% вдень і 40% ввечері). Маленькі кроки роблять робочий стіл комфортнішим щодня 💡
Підсумок
- Створили універсальний скрипт для GNOME і KDE, що перемикає тему і яскравість.
- Налаштували два systemd timers з розкладом на ранок і вечір.
- Розглянули альтернативи (cron, sunrise/sunset, GUI-розширення для GNOME).
- Розв’язали типові проблеми через FAQ (права доступу, Wayland, логи).
- Це чиста автоматизація задач без зайвих залежностей і з повною керованістю.
Ви молодці! Тепер ваш налаштування робочого столу ще розумніші й зручніші. Якщо хочете — додайте більше таймерів для різних сцен (ранній ранок, пізня ніч) і експериментуйте з темами. Kernelka завжди поруч допомогти! 🐧

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.