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

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

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

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

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

我也想为 vlc 打开它。

答案1

您可以通过环境变量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窗口,但仍处于黑暗模式。我不知道这是一个功能还是一个错误......

答案2

对于 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

对于非 GTK+ 应用程序(例如 ) ,您仍然可以通过将type的 X 属性vnc设置为 来强制执行深色窗口装饰。要使用 执行此操作,请键入以下命令,然后单击该窗口:_GTK_THEME_VARIANTUTF8_STRINGdarkxprop

$ 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.

答案3

这是我用来启动具有不同主题的应用程序的 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 获取主题。这会立即将任何主题更改应用于所有活动应用程序,从而不可能更改每个应用程序的主题。

答案4

我为此编写了一个小包装脚本:

#!/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"
"$@" & 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对于正则表达式

相关内容