GTK - включить / установить темную тему для каждого приложения

54

Есть ли способ установить gtk-application-предпочитать-темную-тему для приложения?

Обычно это устанавливается в коде приложением. Такие приложения, как Eye of Gnome и Totem, включают его. Я хочу, чтобы пользователь включил его для каждого приложения.

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

Я также хочу включить его для VLC.

Гари ван дер Мерве
источник

Ответы:

61

С gtk+ ≥ 3.12его помощью вы можете загрузить определенную тему и ее вариант (темный, светлый) для каждого приложения 1 с помощью переменной среды GTK_THEME=theme:variant. Согласно gtk+справочному руководству :

GTK_THEME.  If set, makes GTK+ use the named theme instead of the theme that is
specified by the gtk-theme-name setting [...] It is also possible to specify a
theme variant to load, by appending the variant name with a colon, like this:
GTK_THEME=Adwaita:dark.

Таким образом, чтобы загрузить 2 в темный вариант вы бы работать:

GTK_THEME=Adwaita:dark gedit

Аналогично, для достижения противоположного (когда тема по умолчанию темная), вы загружаете легкий вариант:

GTK_THEME=Adwaita:light gedit

Обратите внимание, что если вы хотите использовать его через пользовательский лаунчер ( .desktopфайл), вам нужно будет добавить envкоманду в Execстроке:

Exec=env GTK_THEME=Adwaita:dark eog %U

1: Стоит отметить, что - в соответствии с решением разработчика - новее gnome-terminalимеет свою собственную конфигурацию через меню> предпочтения и игнорирует тему. Кроме того, поскольку это довольно новый материал, некоторые приложения gtk + 3 могут (пока) не GTK_THEMEучитывать переменную среды.
2: Это не работает, если у вас уже есть запущенный экземпляр этого приложения, например, если nautilusон уже работает в темном режиме, то при запуске GTK_THEME=Adwaita:light nautilusоткроется новое nautilusокно, но все еще в темном режиме. Я не знаю, если это особенность или ошибка ...

don_crissti
источник
Таким образом, вы можете назвать конкретную тему, но не можете сказать «темный вариант какой-либо темы»?
XTL
2
@XTL - Точно. Хотя, GTK_THEME=:light eogкажется, тоже работает ...
don_crissti
5
Кажется, это не работает для большинства приложений.
Тейн
1
Я не смог найти приложение, для которого это работает, когда у меня есть темная тема.
Тейн
2
Я пробовал выше (для. desktopФайлов), но это не работает, даже с env. При запуске из терминала он работает безупречно. Я использую gtk 3.14.5-1 + deb8u1 и пробовал с gedit 3.14.0-3, работающей на Debian "jessie / stable" 8.
aBarocio80
21

Для приложений GTK + -3 вы можете применить вариант темной темы, используя файл settings.ini GtkSettings:

$ mkdir -p $HOME/.config/gnome-terminal/gtk-3.0 # the path before gtk-3.0 is arbitrary
$ cat >> $HOME/.config/gnome-terminal/gtk-3.0/settings.ini << EOF
[Settings]
gtk-application-prefer-dark-theme=true
EOF
$ echo 'alias gnome-terminal="XDG_CONFIG_HOME=$HOME/.config/gnome-terminal gnome-terminal" >> $HOME/.bashrc

Для не-GTK + приложений, таких как vnc, вы по-прежнему можете использовать декорации темных окон, установив для _GTK_THEME_VARIANTсвойства X типа UTF8_STRINGзначение dark. Для этого xpropвведите следующую команду и затем щелкните окно:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark"

xpropМожно также выбрать окна по WM_NAMEсвойству (метка строки заголовка) или по идентификатору окна:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -name "Spotify Premium - Linux Preview"
$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -id 0x380002b

Чтобы получить идентификаторы и имена окон, используйте xlsclients -l.

Флориан Мюльнер
источник
По какой-то причине gnome-terminalрешил, что слишком много усилий, чтобы сохранить код для темы Dark, поэтому, если ваш дистрибутив не исправил это в этой gnome-terminal
непривычной
7

Вот скрипт bash, который я использовал для запуска приложения с другой темой. Я не использовал его годами, поэтому я не знаю, будет ли он работать с текущим GTK.

#!/bin/bash
# lauch a gtk application with a different theme
# set GTKRCFILE variable to your favourite theme
GTKRCFILE=Clearlooks
GTK2_RC_FILES=/usr/share/themes/"$GTKRCFILE"/gtk-2.0/gtkrc "$@"

Вот немного информации, которую я получил из архивов Ubuntu Fourms. Не уверен, что это будет проблемой. ( здесь ) Есть также сообщение в блоге, детально описывающее этот метод. ( здесь ) и ( здесь ). На этом сайте также есть похожий вопрос, на который уже дан ответ. ( здесь )

В gnome приложения получают свою тему от демона gnome-settings-daemon. Это мгновенно применяет любое изменение темы ко всем активным приложениям, делая невозможным изменение темы для каждого приложения.

giodamelio
источник
5
Опечатка или ошибка? ('gnome-settings-demon ") ... Слово это демон (не демон) .. У него совсем другое корневое значение: …(in ancient Greek belief) Daemons are good or benevolent supernatural beings between mortals and gods... daemon = good / demon = bad ... en.wikipedia.org/wiki / Daemon_% 28classical_mythology% 29 .. (произносится днем-
понедельником
Опечатка, вот что происходит, когда ты не все проверяешь по буквам: |
giodamelio
2
@ Peter.O: Различное значение в современном английском, но на самом деле того же происхождения. etymonline.com/index.php?term=demon
Joce
1
пытался GTK2_RC_FILES=/usr/share/themes/Adwaita/gtk-2.0/gtkrc /opt/ide/eclipseи не работает
Робби Неспу
Это хорошо работает для gapcmon
Джонатан Нойфельд
1

Специально для gnome-terminal, вы можете использовать следующее, чтобы сделать конкретное приложение темным:

gsettings set org.gnome.Terminal.Legacy.Settings theme-variant 'dark'
Ник Булл
источник