it-swarm.cn

GTK-在每个应用程序的基础上启用/设置深色主题

有没有办法为应用程序设置gtk-application-prefer-dark-theme?

通常由应用程序在代码中设置。 Eye of Gnome和Totem等应用程序将其打开。我想作为一个用户打开它,基于每个应用程序。

对于gnome-terminal,我通常在黑色背景配色方案上使用白色文本,并且使用深色窗口边框可以改善整体外观。

我也想为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 您将运行的dark变体:

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应用程序,您可以使用GtkSettings的settings.ini实施深色主题变体:

$ 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

对于vnc之类的非GTK +应用程序,您仍然可以通过将_GTK_THEME_VARIANT类型的UTF8_STRING X属性设置为dark来强制执行暗窗装饰。为此,请使用xprop,键入以下命令,然后单击窗口:

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

xprop也可以通过WM_NAME属性(标题栏标签)或窗口ID选择窗口:

$ 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

要获取窗口ID和名称,请使用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存档获得的一些信息。不确定是否会出现问题。 ( here )还有一篇博客文章详细介绍了此方法。 ( 此处 )和( 此处 )。此站点上还有一个类似的问题已得到解答。 ( 这里

在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