Gentoo Flatpak

以前我是不愿使用 Flatpak 或者 Snap 这样独立的类似 Docker Atlas 完全包含完整运行环境的程序包。主要是感觉每个Flatpak需要自己占用一套依赖库,消耗了大量的磁盘空间,也和Linux的精简共享库运行模式相违背。不过,我将自己的工作平台转为Gentoo之后,深感构建 Linux桌面 的不易,特别是:

此时, flatpak 技术为我带来桌面应用的简化:

  • 和底层操作系统隔离

  • 提供丰富的桌面应用

  • 无需自己编译和解决安装依赖

安装

USE flags

sys-apps/flatpak 的一些有用的USE flags:

  • X : 支持X11

  • systemd : 使用 Systemd进程管理器 特定库和功能,例如socket activation 或者 session tracking

Gentoo emerge

备注

基于Chromium的浏览器建议禁用 sys-apps/bubblewrapsuid USE flag,以避免性能影响。但是一些类似 Valve Pressure Vessel(用于Steam)需要 suid 激活才能工作。当关闭 suid 时, bubblewrap 需要内核选项 CONFIG_USE_NS=y 设置。

添加 flathub 仓库

备注

flatpak 可以由用户或root来操作,对于没有系统权限的个人用户,可以使用 --user 参数来使用

个人用户添加 flathub
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

备注

可能需要 proxychains 越过长城

配置

文件列表:

  • /var/lib/flatpak : 全局flatpak状态(系统级安装应用和仓库)

  • $HOME/.local/share/flatpak : 每个用户各自的flatpak状态(本地安装应用和仓库)

  • $HOME/.var/app/ 每个应用状态(配置文件和缓存)

基本使用

Theming

Flatpak文档提供了 Flatpak Desktop Integration (待实践)

GTK

Flatpak应用默认不跟随系统的GTK theme,所以需要找出当前 Gentoo GTK theme,然后在Flatpak应用中安装和使用:

安装GTK theme(这里案例是 Materia-dark-compact )
gsettings get org.gnome.desktop.interface gtk-theme
flatpak install flathub org.gtk.Gtk3theme.Materia-dark-compact

Wayland桌面集成

在使用 在Gentoo环境安装和使用Sway 桌面,需要安装 xdg-desktop-portal 实现才能集成Flakpak,这个安装步骤我在 Gentoo Linux Sway fcitx中文输入 实践中,已经安装了 Gentoo xdg-desktop-portal :

安装 xdg-desktop-portal
emerge --ask sys-apps/xdg-desktop-portal
安装面向 wayland显示服务器协议xdg-desktop-portal-wlr
emerge --ask gui-libs/xdg-desktop-portal-wlr
xdg-desktop-portal-wlr 默认使用 xdg-desktop-portal-gtk 提供portal接口,所以同时安装 sys-apps/xdg-desktop-portal-gtk
emerge --ask sys-apps/xdg-desktop-portal-gtk

Flathub安装应用

KeepassXC

Flathub 官网上可以搜索到应用,按照安装指南进行安装。以 KeepassXC 为例,安装如下:

安装 Flathub 官网提供的 KeepassXC
flatpak install flathub org.keepassxc.KeePassXC

运行:

运行 Flathub 官网提供的 KeepassXC
flatpak run org.keepassxc.KeePassXC

终端运行上述命令显示输出:

运行 Flathub 官网提供的 KeepassXC 终端输出信息
Note that the directories 

'/var/lib/flatpak/exports/share'
'/home/huatai/.local/share/flatpak/exports/share'

are not in the search path set by the XDG_DATA_DIRS environment variable, so
applications installed by Flatpak may not appear on your desktop until the
session is restarted.

qt.qpa.wayland: Wayland does not support QWindow::requestActivate()
qt.qpa.wayland: Wayland does not support QWindow::requestActivate()
qt.qpa.wayland: Wayland does not support QWindow::requestActivate()

这里虽然有提示 qt.qpa.wayland: Wayland does not support QWindow::requestActivate() 但是在 在Gentoo环境安装和使用Sway 环境运行没有影响

意外之喜:

Flatpak 中运行的 KeepassXC 可以支持中文显示,而且 支持中文输入 。也就是说:

这样的运行模式可以精简我的 在Gentoo环境安装和使用Sway 工作环境:

  • 只需要最小化的编译安装 在Gentoo环境安装和使用Sway 桌面

  • 由于我使用的图形软件极少,完全可以不用安装部署GTK/QT/Gnome/KDE就能够运行 Flathub 官网提供的图形软件,大大减轻了我的桌面部署心智负担

  • 可以专注与服务器端技术,将有限的精力投入到开发和AI

Chrome

Flatpak应用的配置文件

Flatpak应用的配置位于个人的 ~/.var/app/ 目录下,分别按照不同的应用分开。例如 chromium 和 KeepassXC 则是:

org.chromium.Chromium
org.keepassxc.KeePassXC

目录下包含了应用各自的配置和缓存以及用户数据

参考