【问题标题】:GTK2 vs. GTK3: detect GTK3 theme in bash scriptGTK2 vs. GTK3:在 bash 脚本中检测 GTK3 主题
【发布时间】:2019-06-19 06:49:49
【问题描述】:

我们基于 Java/SWT 的应用程序在 Linux 上使用 bash 启动脚本。我们需要确定是使用 GTK2(旧 SWT 版本)还是使用 GTK3(新 SWT 版本)启动,因为最新的 SWT 版本不再支持 GTK2,并且在不支持 GTK3 或旧 GTK3 版本的旧系统上会导致问题.尤其是 GTK3 主题(!= Adwaita 或 Ambiance)会导致问题。

如果系统支持 GTK3,如何(在 bash 脚本中)找出配置的 GTK3 主题?可选:了解系统上有哪些 GTK3 主题?

更新:类似于this answer 的小型 C 应用程序也可以。

【问题讨论】:

  • https://github.com/KittyKatt/screenFetch -- screenfetchbash 程序,显示 CPU、RAM 等已安装的 GTK 版本和使用中的 GTK 主题。我建议您使用screenfetch 或获取GTK 部分。 GTK 版本和主题检测依赖于 DE(GOME、XFCE、...)
  • @BachLien 感谢您的链接。哇,超过 250 行来获得主题。也许微型 C 应用程序的选项更短。

标签: linux bash gtk gtk3 gtk2


【解决方案1】:

单线:

Gtk3ThemeName=/tmp/$RANDOM$$ && gcc -o $Gtk3ThemeName -include stdio.h -include gtk/gtk.h -xc <(echo 'int main() {gchar *prop; gtk_init(0, 0); g_object_get(gtk_settings_get_default(), "gtk-theme-name", &prop, 0); return !printf("%s\n", prop);}') $(pkg-config gtk+-3.0 --cflags --libs 2>/dev/null) 2>/dev/null && Gtk3ThemeName="$($Gtk3ThemeName && rm $Gtk3ThemeName)" || unset Gtk3ThemeName

更具可读性:

Gtk3ThemeName=/tmp/$RANDOM$$
if gcc -o $Gtk3ThemeName -include stdio.h -include gtk/gtk.h -xc <(echo '
    int main() {
        gchar *prop;
        gtk_init(0, 0);
        g_object_get(gtk_settings_get_default(), "gtk-theme-name", &prop, 0);
        return !printf("%s\n", prop);
    }') $(pkg-config gtk+-3.0 --cflags --libs 2>/dev/null) 2>/dev/null; then
    Gtk3ThemeName="$($Gtk3ThemeName && rm $Gtk3ThemeName)"
else
    unset Gtk3ThemeName
fi

之后,您只需echo "$Gtk3ThemeName" 即可打印主题名称。

如果没有安装 GTK3(或者如果 gccpkg-config 失败,或者如果 /tmp/ 不可写或受运行保护),则该变量最终将为空。

【讨论】:

  • 这需要在运行脚本的机器上使用 gcc。最好将程序作为预编译的 C 二进制文件编译和发布。
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
相关资源
最近更新 更多