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

Gar*_*rwe 78 gnome gtk gtk3

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

这通常由应用程序在代码中设置。侏儒之眼和图腾等应用程序将其打开。我想作为用户打开它,基于每个应用程序。

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

我也想为 vlc 打开它。

don*_*sti 95

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.
Run Code Online (Sandbox Code Playgroud)

因此,装载2黑暗,你会运行变种:

GTK_THEME=Adwaita:dark gedit
Run Code Online (Sandbox Code Playgroud)

同样,要实现相反的效果(当默认主题为深色时),您可以加载浅色变体:

GTK_THEME=Adwaita:light gedit
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想通过自定义启动器(.desktop文件)使用它,则必须在行中env的命令前加上Exec

Exec=env GTK_THEME=Adwaita:dark eog %U
Run Code Online (Sandbox Code Playgroud)

1:值得注意的是 - 根据开发人员的决定 - 更新gnome-terminal通过菜单>首选项有自己的配置,它忽略了主题。此外,由于这是相当新的东西,一些 gtk+ 3 应用程序可能(还)不支持GTK_THEME环境变量。
2:如果您已经有该应用程序的运行实例,则这似乎不起作用,例如,如果nautilus已经在暗模式下运行,则运行GTK_THEME=Adwaita:light nautilus将打开一个新nautilus窗口,但仍处于暗模式。我不知道这是功能还是错误...

  • 这似乎不适用于大多数应用程序。 (6认同)
  • 我已经尝试了上述(对于 .`desktop` 文件),但它不起作用,即使是使用 `env` 也不行。从终端启动时,它可以完美运行。我使用 gtk 3.14.5-1+deb8u1,并尝试使用 gedit 3.14.0-3,在 Debian“jessie/stable”8 上运行。 (4认同)
  • @XTL - 没错。虽然 `GTK_THEME=:light eog` 似乎也有效...... (2认同)
  • 当我有一个黑暗的主题时,我还没有找到一个适用的应用程序。 (2认同)

小智 23

对于 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
Run Code Online (Sandbox Code Playgroud)

对于像非GTK +应用程序vnc,您还可以通过设置执行黑暗的窗饰_GTK_THEME_VARIANT类的x属性UTF8_STRINGdark。要使用 执行此操作xprop,请键入以下命令,然后单击该窗口:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

要获取窗口 ID 和名称,请使用xlsclients -l.


gio*_*lio 9

这是我用来启动具有不同主题的应用程序的 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 "$@"
Run Code Online (Sandbox Code Playgroud)

这是我从 ubuntu Fourms 档案中获得的一些信息。不知道会不会有问题。(这里)还有一篇博客文章详细介绍了这种方法。(这里)和(这里)。这个网站上也有一个类似的问题,已经回答了。(这里

在 gnome 下,应用程序从 gnome-settings-daemon 获取它们的主题。这会立即将任何主题更改应用于所有活动的应用程序,从而使每个应用程序的主题更改成为不可能。

  • 错别字或错误?('gnome-settings-demon")... 这个词是 **daemon**(不是恶魔)。它有一个非常不同的词根含义:`...(在古希腊信仰中)守护进程是善良或仁慈的超自然存在凡人和众神` ... daemon=good / Demon=bad ... http://en.wikipedia.org/wiki/Daemon_%28classical_mythology%29 ..(读作*day-mon*) (6认同)
  • @Peter.O:在当今英语中的含义不同,但确实起源相同。http://www.etymonline.com/index.php?term=demon (3认同)