it-swarm-ru.tech

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

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

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

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

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

62
Gary van der Merwe

С 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

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

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, но все еще в темном режиме. Я не знаю, если это особенность или ошибка ...

72
don_crissti

Для приложений 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.

22
Florian Müllner

Вот скрипт 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 "[email protected]"

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

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

7
giodamelio

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

gsettings set org.gnome.Terminal.Legacy.Settings theme-variant 'dark'
1
Nick Bull

Я написал небольшой скрипт для этого:

#!/bin/bash


if [ $# -eq 0 ]; then
    xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark"
    exit $?
fi


GTK_THEME="$(gsettings get org.gnome.desktop.interface gtk-theme)"
export  GTK_THEME="${a%%:*}:dark"
export GTK_THEME_VARIANT="dark"
"[email protected]" & PID="$!"
echo "started darkening for PID=$PID"
cnt=0
while :; do
    if [ $cnt -lt 1000 ]; then
        sleep .1
        let 'x=x-1'
    else
        sleep 5
    fi
    if ! kill -0 $PID 2>/dev/null; then
        echo "darkening for PID=$PID done"
        exit 0
    fi
    REGEX="$(echo $PID | cat - <(command ps -o pid:1 --no-headers --ppid $PID) | paste -sd "|" -)"
    wmctrl -lp \
        | rg -i "^(0x[a-f0-9]+)\s+\d+\s+($REGEX)\s" -o --replace '$1' \
        | xargs -I @ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -id @
done

Он использует https://github.com/BurntSushi/ripgrep для REGEX

0
user2452171