web-dev-qa-db-ja.com

GTK-アプリケーションごとにダークテーマを有効/設定

アプリケーションにgtk-application-prefer-dark-themeを設定する方法はありますか?

これは通常、アプリケーションによってコードで設定されます。 Eye of GnomeやTotemなどのアプリでオンにします。ユーザーごとに、アプリケーションごとにオンにしたいと考えています。

Gnome-terminalの場合、私は通常、黒色の背景の配色に白色のテキストを使用します。暗いウィンドウの境界線を使用すると、全体的な外観が向上します。

また、vlcに対してもオンにしたいと考えています。

62

gtk+ ≥ 3.12を使用すると、特定のテーマとそのバリエーション(暗い、明るい)をアプリケーションごとにロードできます1 環境変数GTK_THEME=theme:variantによる基礎。 gtk+リファレンスマニュアル のとおり:

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.

したがって、ロードするには2 実行するdarkバリアント:

GTK_THEME=Adwaita:dark gedit

同様に、(デフォルトのテーマが暗い場合)反対を達成するには、lightバリアントをロードします。

GTK_THEME=Adwaita:light gedit

カスタムランチャー(.desktopファイル)経由で使用する場合は、env行のコマンドの前にExecを追加する必要があります。

Exec=env GTK_THEME=Adwaita:dark eog %U

1:注目に値する-開発者の決定に従って-新しいgnome-terminalはメニュー>設定を介して独自の設定を持ち、テーマを無視します。また、これはかなり新しいものであるため、一部のgtk + 3アプリケーションは(まだ)GTK_THEME環境変数を受け入れない場合があります。
2:アプリケーションの実行中のインスタンスがすでにある場合、これは機能しないようです。 nautilusがすでにダークモードで実行されている場合、GTK_THEME=Adwaita:light nautilusを実行すると新しいnautilusウィンドウが開きますが、ダークモードのままです。これが機能なのかバグなのかわかりません...

72
don_crissti

GTK + -3アプリケーションの場合、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

vncのようなGTK +以外のアプリケーションの場合、_GTK_THEME_VARIANTタイプのUTF8_STRING Xプロパティをdarkに設定することで、暗いウィンドウの装飾を強制できます。これをxpropで行うには、次のコマンドを入力して、ウィンドウをクリックします。

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

xpropは、WM_NAMEプロパティ(タイトルバーのラベル)またはウィンドウ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

ウィンドウのIDと名前を取得するには、xlsclients -lを使用します。

22

これは、別のテーマでアプリケーションを起動するために使用したbashスクリプトです。ただし、何年も使用していないため、現在の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 "$@"

これは、ubuntu fourmsアーカイブから取得した情報の一部です。それが問題になるかどうかわからない。 ( こちら )この方法をもう少し詳しく説明するブログ投稿もあります。 ( ここ )および( ここ )。このサイトには、既に回答済みの同様の質問もあります。 ( ここ

Gnomeでは、アプリはgnome-settings-daemonからテーマを取得します。これにより、すべてのアクティブなアプリケーションにテーマの変更が瞬時に適用され、アプリケーションごとのテーマの変更が不可能になります。

7
giodamelio

特にgnome-terminal、以下を使用して特定のアプリケーションを暗くすることができます:

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

そのための小さなラッパースクリプトを作成しました。

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

正規表現に https://github.com/BurntSushi/ripgrep を使用しています

0
user2452171