Изменение темы GTK для приложения

Недавно мне понадобился текстовый редактор Geany. Я его установил, настроил и решил написать небольшой гайд, шпаргалку по изменению темы отдельного приложения. Я использую дистрибутив Fedora 31, но эта инструкция подойдет практически для любого дистрибутива с рабочим окружением GNOME. Как мы знаем гном имеет "спартанский" выбор настроек. Хорошо это или плохо я рассуждать не буду, а разберусь как это исправить.

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

Как изменить тему GTK для приложения

В рабочем окружении GNOME я использую светлую тему Adwaita. У вас, в зависимости от дистрибутива и личных предпочтений может быть любая другая тема. Как видим из заголовка статьи, я хочу поменять тему одного (или нескольких) приложений GTK.

Итак начнем. Как мы знаем приложение Gnome-tweak изменяет тему всех приложений в системе.
Например светлая:

Или темная:

Также есть исключения дистростроителей или разработчиков GNOME. Например у меня в светлой Adwaita приложения Eye of GNOME (eog) и Totem отображаются в темной теме:

Также на скрине я вставил видеоплеер Celluloid, он не входит в стандартный набор гномовских приложений, но тоже поставляется с темной темой. Хотя в настройках приложения ее можно поменять на светлую.

Примерно тоже хочу сделать и я с нужным мне приложением. Для примера я беру текстовый редактор Geany. По дефолту у меня он выглядит так:

Я же хочу, чтобы он выглядел примерно так, как на официальном сайте Geany:

Идем на сайт Geany: https://www.geany.org/ . Далее по ссылке : https://github.com/geany/geany-themes скачаем ZIP-файл с темами, распакуем и установим (скриптом install.sh или копированием тем в каталог ~/.config/geany/colorschemes/).

Включим в настройках Geany любую темную тему на свой вкус Вид => Цветовые схемы.

Здесь мы видим темный терминал внутри светлого приложения. Немного не так, как хотелось бы.

Идем дальше. Попробуем включить GtkInspector. Это приложение-инструмент для проверки, изменения и понимания приложений GTK+ на лету. В Debian, Ubuntu предварительно убедитесь, что у вас установлен пакет libgtk-3-dev. Наберем в терминале:

gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true

Мы включили GtkInspector. Чтобы запустить GTKInspector, сфокусируйте свое приложение GTK и нажмите Control-Shift-D. Или переместите курсор мыши на нужный виджет и нажмите Control-Shift-I, чтобы специально проверить виджет под курсором мыши.

Запустим GtkInspector. Он включается только в окне с запущенным приложением.

Перейдем на вкладку Внешний вид и включим Темный вариант (или тему Adwaita-dark):

Как видим мы получили желаемый результат, в приложении Geany тема поменялась на темную. Закрываем GtkInspector. Он пока мне не нужен (далее он понадобится для проверки изменений). Вы же можете самостоятельно посмотреть здесь и поиграть с ним. Это довольно таки интересный инструмент и достоин отдельного изучения.

Попробуем перезапустить приложение Geany:

И что мы видим? Темная тема не сохранилась. Geany снова открылся в светлой теме. Нужно искать другое решение, но ничего "Нормальные герои всегда идут в обход" - Айболит - 66 к/ф.

Теперь мы попробуем жестко привязать Geany к темной теме. Согласно руководству GTK+, вы можете загрузить определенную тему и ее вариант (темный, светлый) для каждого приложения через переменную среды: GTK_THEME=theme:variant . И добавить в файл по адресу:

/usr/share/applications/"name application".desktop

команду env (позволяет модифицировать список переменных окружения перед исполнением пользовательской команды) в строке Exec. Где "name application" - имя приложения. В моем случае строка файла:

/usr/share/applications/geany.desktop

должна выглядеть так:

Exec=env GTK_THEME=Adwaita:dark geany %F

Если нам нужна светлая тема строка должна выглядеть так:

Exec=env GTK_THEME=Adwaita:ligh geany %F

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

/usr/share/applications/geany.desktop

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

~/.local/share/applications

Для текущего пользователя. Я предпочитаю и рекомендую хранить различные пользовательские настройки в домашнем каталоге, но рассмотрю оба варианта.

Изменение темы для текущего пользователя

Откроем и отредактируем наш файл запуска:

sudo nano /usr/share/applications/geany.desktop

Найдем строку:

Exec=geany %F

добавим в нее запись  env GTK_THEME=Adwaita:dark и приведем к виду :

Exec=env GTK_THEME=Adwaita:dark geany %F

Сохраним и запустим Geany:

Как видим все работает.

Снова запустим GtkInspector, перейдем на вкладку Внешний вид, попробуем переключить тему. Смена темы заблокирована (затемнена и неактивна), при наведении мыши на переключатель появляется окно с надписью "Тема жестко задана с помощью GTK_THEME" (к сожалению технически я не могу показать всплывающее окно на скриншоте). Как видим мы жестко привязали темную тему к приложению Geany, и сменить тему не получится.

Изменение темы для всех пользователей

Скопируем файл geany.desktop в домашний каталог .local/share/applications через терминал:

cp -r /usr/share/applications/geany.desktop ~/.local/share/applications

Или можно воспользоваться файловым менджером Nautilus. Далее откроем скопированный файл по адресу:

~/.local/share/applications/geany.desktop.

Как и в первом случае найдем строку:

Exec=geany %F

Отредактируем, и приведем к виду:

Exec=env GTK_THEME=Adwaita:dark geany %F

И также проверим:


Как видим и здесь все работает. Вернуть в исходное состояние тему можно редактированием файла в корне или редактированием (или удалением) файла в домашнем каталоге.

Таким образом можно изменить тему одного или нескольких приложений на свой вкус. Стоит отметить, что согласно решению разработчиков Gnome-terminal имеет свое меню настроек и игнорирует темы. Кроме того, некоторые приложения GTK могут не соблюдать переменную: env GTK_THEME. Но это всегда можно проверить программой GtkInspector.

2 комментария

  1. Аватар ch1 27 декабря, 2019 Ответить
  2. Аватар Сергей 30 декабря, 2019 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: