Linux 发行版众多,同一软件在 Ubuntu、Fedora、Arch、Debian 上安装命令各不相同,或者系统的软件仓库里找不到想要的软件版本。
有的系统使用 apt:
有的系统使用 dnf:
还有 pacman、zypper……
对于开发者来说,需要维护多个发行版的软件包;对于用户来说,也意味着学习成本更高。
于是,Linux 社区诞生了一个跨发行版的软件分发方案——Flatpak。
这里就简单介绍一下 Flatpak,以及初次使用时应该知道的一些事情。
什么是 Flatpak?
Flatpak 这个名字有两层意思,既代表了一套跨发行版应用分发框架,也代表了安装在系统中的命令行工具。
第一层:Flatpak 框架(Framework)
这是最广义的 Flatpak。
它不仅仅是一个安装工具,而是一整套跨发行版应用分发方案,包括:
它的目标只有一个:
让同一个 Linux 应用能够在不同发行版上,以统一、安全的方式安装和运行。
因此,可以说:
Flatpak 是一个跨 Linux 发行版的软件分发框架。
第二层:flatpak 命令
当我们在终端输入:
flatpak installflatpak updateflatpak run
这里的 flatpak,指的是安装到系统里的命令行工具。
它负责完成各种实际操作,例如:
它更像是 Flatpak 框架的"管理客户端"。
Flatpak 的几个优点
① 跨发行版
开发者只需要维护一份 Flatpak 包。用户不用关心自己是什么发行版。
例如:
Fedora
Ubuntu
Debian
Linux Mint
Arch Linux
安装命令都是一样的:
② 软件更新更及时
很多发行版的软件仓库,为了保证稳定性,软件版本可能比较旧。
而 Flatpak 往往由软件开发者或社区直接维护,更新速度通常更快。
例如:
Firefox
LibreOffice
OBS Studio
Krita
Blender
Flatpak 版本通常都比较新。
③ 应用拥有独立运行环境(Runtime)
Flatpak 不依赖系统安装的各种库,而是使用自己的 Runtime。
例如:
都可以由 Runtime 提供。
因此不会因为系统升级导致软件无法运行,也减少了"依赖地狱"的问题。
④ 更好的安全性
Flatpak 最大的特点之一,就是沙盒(Sandbox)。
默认情况下,Flatpak 应用:
无法随意读取整个 Home 目录
无法随意访问系统文件
权限都是按需授予
例如:
应用想访问你的 Documents 文件夹,需要经过系统授权。想调用摄像头、麦克风,也需要获得对应权限。相比传统 Linux 软件,安全性更高。
Flatpak 和 Flathub 是什么关系?
就像:
apt ←→ Ubuntu 软件源
dnf ←→ Fedora 仓库
一样。
真正的软件,大多数都来自:
Flathub
Flathub 可以理解成:
Linux 最大的 Flatpak 软件仓库。
里面已经拥有数千个应用,包括:
Firefox
Chromium
VLC
OBS Studio
Steam
Spotify
Discord
GIMP
Krita
Blender
……
几乎日常桌面软件都能找到。
第一次使用 Flatpak,需要添加 Flathub
有些发行版(例如 Fedora)默认已经安装了 Flatpak,但并不会默认启用完整的 Flathub 仓库。
因此第一次使用时,可以先查看当前仓库:
如果没有看到:
可以用以下命令添加:
flatpak remote-add --if-not-exists flathub \https://flathub.org/repo/flathub.flatpakrepo
随后更新一下仓库信息:
以后安装软件就非常方便了。
例如安装 VLC:
flatpak install flathub org.videolan.VLC
卸载软件:
flatpak uninstall flathub org.videolan.VLC
Bazaar —— 图形化应用商店
虽然命令行功能很完善易用,但图形界面更容易被用户接受。
Bazaar是Flatpak的图形化应用商店,现代软件商店的基本功能它都有,软件源专注于flathub。
它支持:
浏览 Flathub 软件
搜索软件
查看截图
查看更新日志
一键安装
一键卸载
更新应用
对于用户来说,比命令行更加直观。
如果平时主要使用 GNOME 桌面,推荐安装。
Flatseal —— 权限管理神器
Flatpak 的特点之一是沙盒,权限划分很细致,但使用中也会带一些不便,可能常需要根据个人需求定制软件的权限。
如果某个软件需要:
例如:
读取整个 Home
访问 Downloads
使用 SSH Key
调用 Docker Socket
这时调整软件权限,使用Flatseal就非常方便直观。打开Flatseal以后,每个应用都可以分别设置:
文件系统权限
网络权限
USB
GPU
环境变量
Session Bus
System Bus
Portal
等等。
例如:
你可以只允许某个软件访问:
~/Downloads, 而不是整个 Home。也可以关闭某些权限,进一步提升安全性。对于经常使用 Flatpak 的用户来说,Flatseal 几乎是必装软件。
如何查看一个 Flatpak 应用拥有的权限?
命令行可以直接查看:
flatpak info --show-permissions 应用ID
例如:
flatpak info --show-permissions org.chromium.Chromium
就可以看到:
文件系统权限
Socket
Device
Environment
D-Bus
Portal
等详细信息。
如果只是日常使用,则直接使用 Flatseal 查看会更加直观。
添加一些自定义设置的方法
有时需要在应用快捷方式.desktop文件中增加选项(比如强制mpv player开启硬件加速 又或 开启chrome的一些功能等等),但在面对flatpak应用时这样做无法持久化,因为flatpak在每次升级应用后会重置.desktop文件,所以需要把.desktop文件复制到用户文件夹来让改动持久化。
首先要找到flatpak应用的.desktop文件位置,不同发行版位置会有区别,准 确位置可以通flatseal查看,但通常位置都在:
/var/lib/flatpak/exports/share/applications
找到要修改的文件复制到:
~/.local/share/applications
然后再对复制后的文件进行修改即可。
flatpak的代理设置
flatpak命令自身暂时没有代理选项,但是会读取环境变量中http代理设置,设置方法可参考:
一些常用 CLI 命令行程序代理设置方法 - 备忘
因为Bazaar应用商店的软件源是flathub, 通常需经代理才能流畅访问,给Bazaar单独设代理较方便方法是在flatseal中单独给Bazaar增加环境变量http_proxy和https_proxy。