В Linux приложения рисуются двумя большими наборами библиотек: GTK и Qt. Первый используют GNOME, Cinnamon, Xfce и большинство утилит окружения, второй — KDE, а также многие кроссплатформенные программы. Из-за этого на одном рабочем столе легко получить три разных вида: светлые окна GTK, тёмный Qt-клиент и что-то среднее у Flatpak-сборки. Ниже — как привести всё к одному виду и не сломать систему при обновлении.
Где Linux ищет темы
Тема — это каталог с CSS-подобными файлами для GTK и отдельными конфигами для Qt. Пользовательские темы ставятся в ~/.local/share/themes (современный путь) или ~/.themes (старый, но всё ещё поддерживаемый). Иконки и курсоры лежат рядом, в каталоге icons.
mkdir -p ~/.local/share/themes ~/.local/share/icons
tar -xf Nordic.tar.xz -C ~/.local/share/themes
Хорошая тема содержит каталоги gtk-2.0, gtk-3.0 и gtk-4.0. Если четвёртой ветки нет, приложения на GTK4 останутся в Adwaita — это нормально и не является ошибкой установки.
Настройка GTK
Имя темы задаётся ключом gtk-theme в схеме интерфейса. Там же меняются иконки, курсор и цветовая схема. Настройки подхватывают GTK3-приложения и те GTK4-программы, которые не используют libadwaita.
gsettings set org.gnome.desktop.interface gtk-theme 'Nordic'
gsettings set org.gnome.desktop.interface icon-theme 'Papirus'
gsettings set org.gnome.desktop.interface cursor-theme 'Bibata-Modern-Ice'
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
Ключ color-scheme управляет тёмным режимом на уровне окружения: его понимают libadwaita и часть Qt-приложений через портал настроек. Это более надёжный способ включить тёмное оформление, чем подменять тему целиком.
У многих тем есть отдельные варианты, например Nordic и Nordic-dark. В GTK3 переключение color-scheme не меняет набор CSS, поэтому для тёмного варианта имя темы нужно указывать явно. Проверить, какие варианты присутствуют, можно по подкаталогам внутри темы или командой ls в каталоге тем.
Проверить тему без перезапуска сессии можно переменной GTK_THEME. Она действует только на запущенный процесс и удобна для сопоставления вариантов.
GTK_THEME=Nordic gtk3-demo
GTK_THEME=Adwaita:dark gtk4-demo
Почему GTK4 выглядит иначе
Приложения на libadwaita сознательно игнорируют пользовательские темы: авторы библиотеки считают, что единый вид важнее кастомизации. Для них работают цветовая схема, акцентный цвет и настройки шрифта, но не произвольный CSS из каталога тем. Существуют патчи и утилиты вроде Gradience, однако они вмешиваются в работу библиотеки и ломаются при обновлении. Если единообразие важнее, выбирайте приложения, которые следуют системной схеме, а не воюйте с libadwaita.
Настройка Qt
Qt-приложения не читают настройки GNOME напрямую. Им нужен посредник: qt6ct для Qt6, qt5ct для Qt5 или Kvantum для тем в формате SVG. Посредник указывается переменной окружения.
sudo apt install qt6ct qt5ct kvantum
QT_QPA_PLATFORMTHEME=qt6ct qt6ct
Файлы в ~/.config/environment.d читает systemd user session, поэтому переменные попадут во все графические приложения. Если дистрибутив запускает сессию иначе, добавьте те же строки в ~/.profile и перезайдите. Дальше откройте qt6ct, выберите стиль, палитру и шрифт — настройки сохранятся в конфиге qt6ct и применятся к новым процессам.
В KDE посредник не нужен: Plasma сама задаёт оформление Qt-приложений, а специальный модуль переносит цвета и шрифты в GTK-темы.
Flatpak и Snap
Песочница видит только те каталоги, которые ей разрешили. Поэтому тема, установленная в домашний каталог, может не примениться к Flatpak-приложению. Разрешение выдаётся один раз и действует для всех сборок пользователя.
flatpak override --user --filesystem=xdg-data/themes:ro
flatpak override --user --filesystem=xdg-data/icons:ro
С Snap сложнее: доступ к домашним каталогам ограничен политикой пакета, и тема из домашнего каталога часто недоступна. Практичный вывод — для приложений из Snap оставить системное оформление и не тратить время на погоню за идеальным совпадением.
Flatpak-приложения получают настройки окружения через портал: он транслирует имя темы и тёмный режим из gsettings. Поэтому сначала добейтесь правильного вида в обычных программах, а уже потом выдавайте разрешения песочнице. Если тема лежит в системном каталоге, доступ по файловой системе не нужен — он и так виден сборке.
Проверка результата
Сопоставлять оформление лучше на одинаковых диалогах, а не на главных окнах: кнопки, поля ввода и меню демонстрируют несоответствия оперативнее. Единообразие оформления заметно экономит время и предотвращает неожиданные несовпадения между разными приложениями. Откройте рядом GTK3-программу, GTK4-приложение и Qt-клиент и пройдитесь по четырём пунктам.
- Фон окон и цвет текста совпадают, нет внезапно белых панелей.
- Кнопки одинаковой высоты, скругления и отступы не конфликтуют.
- Иконки одного набора, курсор не меняется при переходе между окнами.
- Тёмная схема сохраняется после перезапуска приложения.
Если Qt-программа выбивается, проверьте, не задан ли стиль в её собственном ярлыке. Многие установщики прописывают параметр style в файле .desktop, и он перекрывает глобальную настройку qt6ct.
Приложения от root и старые программы
Программы, запущенные через sudo, не наследуют пользовательские переменные и рисуются стандартной темой. Запускайте графические утилиты через pkexec с явной переменной, а GTK2-приложения настраивайте отдельным файлом настроек GTK2.
pkexec env GTK_THEME=Nordic gparted
printf 'gtk-theme-name="Nordic"\ngtk-icon-theme-name="Papirus"\n' > ~/.gtkrc-2.0
Диагностика
- Проверьте, какая версия GTK у программы: ldd $(which nautilus) | grep gtk.
- Посмотрите, не переопределяет ли тему сам ярлык: grep -i gtk ~/.local/share/applications.
- Убедитесь, что каталог темы содержит index.theme — без него GTK не увидит оформление.
- Для Qt проверьте переменную env | grep QT_ и наличие конфига qt6ct.
Чек-лист
- Тема, иконки и курсор лежат в домашнем каталоге, а не в системном.
- Тёмный режим включён через color-scheme, а не только подменой темы.
- Для Qt задан QT_QPA_PLATFORMTHEME и установлен qt6ct.
- Flatpak получил доступ к каталогам тем или использует GTK_THEME.
- После обновления проверено, что тема не сломала GTK4-приложения.
Итог
Единый вид в Linux — это не одна тема, а согласованные настройки трёх уровней: GTK через gsettings, Qt через qt6ct или Plasma, и отдельные правила для песочниц. Начните с color-scheme и одной проверенной темы, затем настройте Qt и выдайте разрешения Flatpak. Такой подход переживает обновления и не требует патчей библиотек.