web-dev-qa-db-fra.com

GTK - Activer / définir un thème sombre pour chaque application

Existe-t-il un moyen de définir gtk-application-prefer-dark-theme pour une application?

Ceci est normalement défini dans le code par l'application. Des applications telles que Eye of Gnome et Totem l'allument. Je veux, en tant qu'utilisateur l'activer, sur une base par application.

Pour gnome-terminal, j'utilise normalement un texte blanc sur un jeu de couleurs de fond noir, et avoir une bordure de fenêtre sombre améliorerait l'aspect général.

Je veux également l'activer pour vlc.

62

Avec gtk+ ≥ 3.12 vous pouvez charger un thème spécifique et sa variante (sombre, clair) sur une application1 base via la variable d'environnement GTK_THEME=theme:variant. Selon le gtk+ manuel de référence :

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.

Donc, pour charger2 la variante sombre que vous exécuteriez:

GTK_THEME=Adwaita:dark gedit

De même, pour obtenir le contraire (lorsque le thème par défaut est sombre), vous chargez la variante claire :

GTK_THEME=Adwaita:light gedit

Notez que si vous souhaitez l'utiliser via un lanceur personnalisé (.desktop fichier), vous devrez ajouter env à la commande dans la ligne Exec:

Exec=env GTK_THEME=Adwaita:dark eog %U

1: Il convient de noter que - conformément à la décision des développeurs - plus récent gnome-terminal a sa propre configuration via le menu> préférences et il ignore le thème. De plus, comme il s'agit de nouveautés, certaines applications gtk + 3 pourraient (encore) ne pas honorer le GTK_THEME variable d'environnement.
2: Cela ne semble pas fonctionner si vous avez déjà une instance en cours d'exécution de cette application, par exemple si nautilus est déjà en cours d'exécution en mode sombre, alors en cours d'exécution GTK_THEME=Adwaita:light nautilus ouvrira une nouvelle fenêtre nautilus mais toujours en mode sombre. Je ne sais pas si c'est une fonctionnalité ou un bug ...

72
don_crissti

Pour les applications GTK + -3, vous pouvez appliquer la variante de thème sombre à l'aide du fichier settings.ini de GtkSettings:

$ 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

Pour les applications non GTK + comme vnc, vous pouvez toujours appliquer des décorations de fenêtre sombres en définissant le _GTK_THEME_VARIANT Propriété X de type UTF8_STRING à dark. Pour ce faire avec xprop, tapez la commande suivante et cliquez ensuite sur la fenêtre:

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

xprop peut également sélectionner des fenêtres par le WM_NAME propriété (le libellé de la barre de titre) ou par id de fenêtre:

$ 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

Pour obtenir les identifiants et les noms de fenêtres, utilisez xlsclients -l.

22
Florian Müllner

Voici un script bash que j'ai utilisé pour lancer une application avec un thème différent. Je ne l'ai pas utilisé depuis des années, donc je ne sais pas si cela fonctionnera avec la GTK actuelle.

#!/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 "$@"

Voici quelques informations que j'ai extraites des archives ubuntu fourms. Je ne sais pas si ce sera un problème. ( ici ) Il y a aussi un article de blog détaillant un peu plus cette méthode. ( ici ) et ( ici ). Il y a aussi une question similaire sur ce site qui a déjà été répondue. ( ici )

Sous gnome, les applications obtiennent leur thème à partir du démon gnome-settings-daemon. Cela applique instantanément tout changement de thème à toutes les applications actives, ce qui rend impossible le changement de thème par application.

7
giodamelio

Spécifiquement pour gnome-terminal, vous pouvez utiliser les éléments suivants pour assombrir l'application spécifique:

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

J'ai écrit un petit script wrapper pour ça:

#!/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

Il utilise https://github.com/BurntSushi/ripgrep pour REGEX

0
user2452171