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