it-swarm-tr.com

GTK - Uygulama başına temel temayı etkinleştirme / ayarlama

Bir uygulama için gtk-application-prefer-dark-teması ayarlamanın bir yolu var mı?

Bu normalde uygulama tarafından kodda ayarlanır. Eye of Gnome ve Totem gibi uygulamalar onu açar. Bir kullanıcı olarak her uygulama bazında açmak istiyorum.

GNOME terminali için, normalde siyah arka plan renk şemasında beyaz bir metin kullanırım ve koyu pencere kenarına sahip olmak genel görünümü iyileştirir.

Ayrıca vlc için de açmak istiyorum.

62

İle gtk+ ≥ 3.12 Uygulama başına belirli bir temayı ve değişkenini (koyu, açık) yükleyebilirsiniz1 GTK_THEME=theme:variant. Göre gtk+ başvuru kılavuz :

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.

Yani, yüklemek için2 Çalıştırdığınız karanlık varyant:

GTK_THEME=Adwaita:dark gedit

Benzer şekilde, (varsayılan tema karanlık olduğunda) tersini elde etmek için, ışık varyantını yüklersiniz:

GTK_THEME=Adwaita:light gedit

Özel bir başlatıcı aracılığıyla kullanmak istiyorsanız (.desktop dosya) env satırını Exec satırındaki komuta eklemeniz gerekir:

Exec=env GTK_THEME=Adwaita:dark eog %U

1: Geliştiricilerin verdiği karara göre - daha yeni gnome-terminal, menü> tercihler aracılığıyla kendi yapılandırmasına sahiptir ve temayı yok sayar. Ayrıca, bu oldukça yeni şeyler olduğu için, bazı gtk + 3 uygulamaları (henüz) GTK_THEME Çevre değişkeni.
2: Bu uygulamanın zaten çalışan bir örneğine sahipseniz, bu işe yaramaz gibi görünüyor. nautilus zaten karanlık modda çalışıyorsa GTK_THEME=Adwaita:light nautilus yeni bir nautilus penceresi açacak, ancak yine de karanlık modda. Bunun bir özellik mi yoksa bir hata mı olduğunu bilmiyorum ...

72
don_crissti

GTK + -3 uygulamaları için GtkSettings ayarlarını kullanarak karanlık tema varyantını zorlayabilirsiniz:.

$ 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

vnc gibi GTK + dışındaki uygulamalar için, _GTK_THEME_VARIANT Türündeki UTF8_STRING X özelliğini dark olarak ayarlayarak karanlık pencere süslemelerini yine de uygulayabilirsiniz. Bunu xprop ile yapmak için aşağıdaki komutu yazın ve ardından pencereyi tıklayın:

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

xprop ayrıca pencereleri WM_NAME özelliğine (başlık çubuğu etiketi) veya pencere kimliğine göre de seçebilir:

$ 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

Pencere kimliklerini ve adlarını almak için xlsclients -l Kullanın.

22

Farklı bir temalı bir uygulamayı başlatmak için kullandığım bir bash betiği. Yıllar boyunca kullanmadım, bu yüzden mevcut GTK ile çalışıp çalışmayacağını bilmiyorum.

#!/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 "[email protected]"

İşte biraz bilgi ubuntu fourms arşiv indi. Bir sorun olup olmayacağından emin değilim. ( burada ) Bu yöntemi biraz daha detaylandıran bir blog yazısı da var. ( burada ) ve ( burada ). Bu sitede de zaten cevaplanmış benzer bir soru var. ( burada )

GNOME altında, uygulamalar temalarını gnome-settings-daemon'dan alır. Bu, herhangi bir tema değişikliğini anında tüm etkin uygulamalara uygulayarak uygulama başına temayı değiştirmeyi imkansız hale getirir.

7
giodamelio

Özellikle için gnome-terminal, belirli uygulamayı karanlık yapmak için aşağıdakileri kullanabilirsiniz:

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

Bunun için küçük bir sarmalayıcı komut dosyası yazdım:

#!/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"
"[email protected]" & 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

REGEX için https://github.com/BurntSushi/ripgrep kullanıyor

0
user2452171