Is there a way to set gtk-application-prefer-dark-theme for an application?

This is normally set in the code by the application. Apps such as Eye of Gnome and Totem turn it on. I want to, as a user turn it on, on a per application bases.

For gnome-terminal, I normally use a white text on black background color scheme, and having the dark window border would improve the overall look.

I also want to turn it on for vlc.


With gtk+ ≥ 3.12 you can load a specific theme and its variant (dark, light) on a per-application1 basis via the environment variable GTK_THEME=theme:variant. As per the gtk+ reference manual:

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:

So, to load2 the dark variant you would run:

GTK_THEME=Adwaita:dark gedit

Likewise, to achieve the opposite (when the default theme is dark), you load the light variant:

GTK_THEME=Adwaita:light gedit

Note that if you want to use it via a custom launcher (.desktop file) you'll have to prepend env to the command in the Exec line:

Exec=env GTK_THEME=Adwaita:dark eog %U

1: Worth noting that - as per the devs decision - newer gnome-terminal has its own configuration via menu > preferences and it ignores the theme. Also, since this is rather new stuff, some gtk+ 3 applications might not (yet) honor the GTK_THEME environment variable.
2: This doesn't seem to work if you already have a running instance of that application e.g. if nautilus is already running in dark mode then running GTK_THEME=Adwaita:light nautilus will open a new nautilus window but still in dark mode. I don't know if this is a feature or a bug...

  • So you can name a specific theme, but can't say "dark variant of whatever theme is set"? – XTL Mar 18 '15 at 7:38
  • 2
    @XTL - Exactly. Though GTK_THEME=:light eog seems to be working too... – don_crissti Mar 18 '15 at 12:04
  • 6
    This doesn't seem to work for most applications. – Thayne Jun 1 '15 at 23:53
  • 1
    I haven't been able to find an application that this works for yet, when I have a dark theme. – Thayne Jun 1 '15 at 23:58
  • 4
    I have tried the above (for .desktop files), but it doesn't work, not even with the env. When launched from terminal it works prefectly. I use gtk 3.14.5-1+deb8u1, and tried with gedit 3.14.0-3, running on Debian "jessie/stable" 8. – aBarocio80 Jul 13 '16 at 18:13

For GTK+-3 applications, you can enforce the dark theme variant using 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
$ echo 'alias gnome-terminal="XDG_CONFIG_HOME=$HOME/.config/gnome-terminal gnome-terminal" >> $HOME/.bashrc

For non-GTK+ applications like vnc, you can still enforce dark window decorations by setting the _GTK_THEME_VARIANT X property of type UTF8_STRING to dark. To do this with xprop, type the following command and click the window afterwards:

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

xprop can also select windows by the WM_NAME property (the title bar label) or by window 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

To get window ids and names, use xlsclients -l.

  • For some reason gnome-terminal has decided it's too much effort to keep the code for the Dark theme, so unless your distro has patched this back in this wont work for gnome-terminal – MattSturgeon Mar 12 '16 at 21:03

Here is a bash script I have used to launch a application with a different theme. Haven't used it in years though, so I don't know if it will work with the current GTK.

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

Here is a bit of info I got off the ubuntu fourms archives. Not sure if it will be a problem. (here) There is also a blog post detailing this method a little more. (here) and (here). There is also a similar question on this site that has already been answered. (here)

Under gnome, apps get their theme from the gnome-settings-daemon. This instantaneously applies any theme change to all active applications, making per-appplication theme changing impossible.

  • 6
    Typo or mistake? ('gnome-settings-demon")... The word is daemon (not demon).. It has a very different root meaning: …(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 .. (pronounced day-mon) – Peter.O Jun 10 '11 at 8:03
  • Typo, that's what happens when you don't spell check everything :| – giodamelio Jun 10 '11 at 9:27
  • 3
    @Peter.O: Different meaning in present day English, but same origin indeed. etymonline.com/index.php?term=demon – Joce Jan 27 '16 at 8:49
  • 1
    tried with GTK2_RC_FILES=/usr/share/themes/Adwaita/gtk-2.0/gtkrc /opt/ide/eclipse and does't worked – Robbi Nespu Aug 9 '18 at 9:23
  • This works well for gapcmon – Jonathan Neufeld Nov 9 '19 at 3:06

Specifically for gnome-terminal, you can use the following to make the specific application dark:

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

I wrote a little wrapper script for that:


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

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"
while :; do
    if [ $cnt -lt 1000 ]; then
        sleep .1
        let 'x=x-1'
        sleep 5
    if ! kill -0 $PID 2>/dev/null; then
        echo "darkening for PID=$PID done"
        exit 0
    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 @

It'S using https://github.com/BurntSushi/ripgrep for REGEX


If somebody still need it, I've created simple app that will automatically set dark theme for specified apps.

You can find it here: https://github.com/galczo5/gnome-dark-apps

  • 4
    Please describe how this app can be used to answer the question. – Scott May 4 '20 at 23:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.