我们基于Java/SWT的应用程序使用Linux上的bash启动脚本。我们需要了解是使用GTK2 (旧的SWT版本)还是使用GTK3 (较新的SWT版本)启动,因为最新的SWT版本不再支持GTK2,并在不支持GTK3或旧GTK3版本的旧系统上造成问题。特别是GTK3 3-主题(!= Adwaita或Ambiance)会引起问题。
如果系统支持GTK3,那么如何(在bash脚本中)找到配置了什么GTK3主题?可选:找出系统上有哪些GTK3主题可用?
更新:--一个类似于this answer的小型C应用程序--也可以。
发布于 2019-01-27 04:01:37
单线:
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 (或者gcc或pkg-config失败,或者/tmp/不是可写的或者是运行保护的),那么变量最终将为空。
https://stackoverflow.com/questions/54365212
复制相似问题