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: GTK_THEME=Adwaita:dark.
So, to load2 the dark variant you would run:
Likewise, to achieve the opposite (when the default theme is dark), you load the light variant:
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=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…
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 [Settings] gtk-application-prefer-dark-theme=true 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
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
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.
#!/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 "$@"
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.