在 Linux 中的 Flatpak 应用程序上应用 GTK 系统主题
由于其沙箱性质,Flatpak 应用程序无法与系统主题很好地配合。只需付出一点努力,您就可以使它们与系统主题一起使用。
一些用户避免安装 Flatpak 应用程序的原因之一是,大多数 Flatpak 应用程序不会根据当前系统主题更改其外观。这使得应用程序在您原本漂亮的设置中显得格格不入。
将 GTK 主题应用到 Flatpak 应用程序的官方方法是将所需主题安装为 Flatpak。然而,只能安装几个 GTK 主题来完成这项工作。
如果您找到了漂亮的 GTK 主题,您的 Flatpak 应用程序仍将使用其默认外观。可是等等!有一个解决方法。
在本教程中,我将向您介绍几种使 Flatpak 应用程序了解外部 GTK 主题和图标的方法。
通过命令行将GTK主题和图标应用到Flatpak
使用 Flatseal 通过 GUI 应用 GTK 主题和图标
1. 将 GTK 主题和图标应用于 Flatpak 应用程序(命令行方法)
在继续之前,让我们先了解为什么 Flatpak 应用程序有这种行为。
Flatpak 应用程序在“容器”内运行,因此如果没有明确设置适当的权限,它们就无法访问主机文件系统、网络或物理设备,这就是我们要做的。
正如我之前所说,这是一种解决方法,而不是完美的解决方案。 当您更改系统主题时,不要指望它会自动更改 Flatpak 应用的主题。但是,您可以通过一个命令为所有 Flatpak 应用更改它。
推荐阅读:Ubuntu 和其他 Linux 发行版的最佳 GTK 主题
让我们看看如何实现这一目标。请注意,此方法要求您熟悉 Linux 命令行,并且可以在终端中找到方法。
第 1 步:让 Flatpak 应用程序访问 GTK 主题和图标位置
对于所有用户,GTK 主题位于 /usr/share/themes
和 /usr/share/icons
中,对于特定用户则位于 ~/.themes 和 ~/.icons 中用户。
要授予所有 Flatpak 包访问 ~/.themes 和 ~/.icons 的权限,请运行以下命令:
sudo flatpak override --filesystem=$HOME/.themes
sudo flatpak override --filesystem=$HOME/.icons
请注意,您无法授予对 /usr/share/themes 的访问权限,因为根据 Flatpak 文档,它们已被列入黑名单。
或者,您也可以针对每个应用程序执行此操作。更改主题需要指定应用程序ID。
sudo flatpak override org.gnome.Calculator --filesystem=$HOME/.themes
sudo flatpak override org.gnome.Calculator --filesystem=$HOME/.icons
第 2 步:告诉 Flatpak 应用程序使用哪个主题/图标
授予对主题和图标目录的访问权限是不够的,因为该目录可能包含多个主题。要告诉 Flatpak 使用哪个 GTK 主题/图标,首先获取所需项目的名称,然后应用以下命令:
sudo flatpak override --env=GTK_THEME=my-theme
sudo flatpak override --env=ICON_THEME=my-icon-theme
正如您在下面的屏幕截图中看到的,有几个主题和图标可用。 复制并粘贴确切的主题/图标名称到上述命令中:
或者,对于单个应用程序,运行:
sudo flatpak override org.gnome.Calculator --env=GTK_THEME=my-theme
sudo flatpak override org.gnome.Calculator --env=ICON_THEME=my-icon-theme
并将 my-theme 和 my-icon-theme 替换为您要应用的主题和图标的文件夹名称(并且它必须分别位于 ~/.themes 和 ~/.icons 中)。
2.使用Flatseal将GTK主题和图标应用到Flatpak应用程序(GUI方法)
如果您不习惯每次执行命令来更改 Flatpak 主题,Flatseal 应用程序可以帮助您。 Flatseal 允许用户更改和查看已安装的 Flatpak 应用程序的系统资源访问权限。简而言之,它是 Flatpak 应用程序的权限管理器。
您可以在任何 Linux 发行版中将 Flatseal 作为 Flatpak 安装:
flatpak install flathub com.github.tchx84.Flatseal
使用 Flatseal,您可以以简化的方式执行 Flatpak 应用程序的 GTK 主题。尽管如此,您仍然需要知道环境变量的名称。
为所有已安装的 Flatpak 应用程序设置主题和图标
打开 Flatseal 并选择所有应用程序选项卡。您需要滚动一下,可以找到两个部分,分别称为文件系统和环境。
在“文件系统”部分中,您需要指定 Flatpak 应用程序可以访问的位置。由于我们位于“所有应用程序”选项卡中,因此将为所有已安装的 Flatpak 应用程序设置权限。在我们的例子中,您需要添加 ~/.themes
和 ~/.icons
目录。
同样,在“Environment”部分,您需要添加两个环境变量,就像在命令行方法中一样。因此,请设置 GTK_THEME 和 ICON_THEME,如屏幕截图所示(请使用您的主题/图标名称)。
完成后,重新启动应用程序即可获得效果。请注意,这将为所有 Flatpak 应用程序设置指定的主题和图标。
为各个应用程序设置主题和图标
与命令行方法一样,在 Flatseal 中,您也可以选择单独为 Flatpak 应用程序设置主题。这是通过为每个应用程序单独切换文件系统和环境变量来实现的。为此,您可以选择 Flatseal 中的每个应用程序选项卡并执行相同的过程,而不是“所有应用程序”选项卡。
您必须重新启动特定应用程序才能获得应用的效果。
3.其他Flatpak应用主题(实验性)
到目前为止,我们讨论了将 GTK 主题应用于 Flatpak 应用程序。在某些情况下,我们想要处理基于 Qt 的应用程序。将主题应用到 Qt 应用程序比应用到 GTK 更棘手。所以,下面的方法只是一个参考,可能并不总是有效。
KDE Plasma 环境中的 Qt Flatpak 应用程序
KDE Plasma 使用 Qt 框架。因此,在这种情况下,将主题应用到基于 qt 的应用程序非常容易。幸运的是,大多数时候通过 KDE 系统设置应用的全局主题也适用于 Flatpak 应用程序。但是,为了使外观完整,我们需要添加 kvantum 主题。
为了应用 kvantum 主题,您需要从 Flathub 安装 kvantum 包,如下所示:
flatpak install org.kde.KStyle.Kvantum
现在,它将提示输入两个软件包,您可能需要安装 org.kde.KStyle.Kvantum 1.0.5(在我的情况下效果令人满意)。
完成后,您可以通过 kvantum 管理器应用程序更改主题。如果您不知道如何更改 kvantum 主题,请参阅我们的 KDE 主题指南。一旦更改了kvantum主题,您可以在终端中输入以下命令:
sudo flatpak override --env=QT_STYLE_OVERRIDE=kvantum --filesystem=xdg-config/Kvantum:ro <name of flatpak app>
这会将主题应用到您的特定 Qt 应用程序。您可以使用 Flatseal 做同样的事情。首先,您需要从列表中选择要设置主题的特定 Qt 应用程序。
现在,在文件系统选项卡上添加xdg-config/Kvantum:ro
,并在环境选项卡中添加QT_STYLE_OVERRIDE=kvantum
如下图所示:
不要忘记重新启动应用程序以获得效果。
通过运行 Flatpak 应用程序来测试主题更改
如果应用程序已经在运行,您必须关闭并重新启动它。请记住,如果应用程序缩小到托盘,您需要退出并重新打开它。您将看到新启动的应用程序使用您之前指定的主题。
这是执行上述步骤之前 GNOME 计算器和 GNOME 构建器(Flatpak 版本)的屏幕截图:
完成上述步骤后(使用 Orchis GTK 主题和 Tela 图标):
这样更好,对吧?现在,我可以将您留在这里,但最好提及恢复更改的步骤。
恢复更改
您可以通过立即重置所有覆盖来重置更改。请注意,这将重置您之前明确设置的所有覆盖。
sudo flatpak override --reset
或者,您也可以在包级别重置权限:
sudo flatpak override --reset org.example.app
如果您之前使用“flatpak override”覆盖了特定 Flatpak 包的 GTK_THEME 或文件系统,则重置将帮助您再次设置它。
使用上述命令,通过 Flatseal 设置的任何主题都不会被还原。
因此,要恢复或更改主题,您需要删除或修改 Flatseal 应用程序中的环境变量。
将主题应用到基于 Qt 的应用程序
某些应用程序使用 Qt 框架而不是 GTK。将主题应用于 Flatpak 应用程序,qt 的基础有点棘手。或多或少这是一个反复试验的过程。通常,如果您使用的是 KDE 系统,大多数应用程序都会接受全局主题设置。
为了应用主题,您需要 Flathub 提供的额外 kvantum 包。
附加信息
正常的 GTK 应用程序会加载 gsettings 指定的 GTK 主题(通常),您可以运行以下命令来获取当前应用的 GTK 主题:
gsettings get org.gnome.desktop.interface gtk-theme
要设置 GTK 主题,请运行:
gsettings set org.gnome.desktop.interface gtk-theme my-theme
要使用 Flatpak 执行上述操作,您必须通过运行以下命令在所需应用程序的容器内输入 shell 会话:
flatpak run --command=bash org.gnome.Calculator
并在此会话中运行上述命令:
gsettings set org.gnome.desktop.interface gtk-theme my-theme
我求助于使用 GTK_THEME 环境变量,该变量应该用于调试目的。如果您设法使
gsettings
正常工作,请在评论中告诉我。
这些方法可能不是更改 Flatpak 应用程序主题的最无缝方式。不过,有总比没有好。
我希望这可以帮助你。如果您遇到任何问题,请在评论中提及。
本文最初由 It 的 FOSS 读者 Hamza Algohary 贡献。我们编辑并改进了这篇文章,提供了更多信息。