flatpak在Linux系统提供了兼容层,可以让同样的二进制程序运行在任意Linux发行版,这样不同发行版的用户就可以一定程度上打破发行版的限制,使用发行版以外的二进制软件包。
比如说某发行版没有提供某软件的包,如果用户需要用,那么可能就要自己编译,而自己动手编译门槛很高。要么就要找第三方源来安装,第三方源可能安全性存疑,也可能有兼容性问题,还可能访问速度慢,总之还是有一些问题。
flatpak从某种意义上提供了适用于所有Linux发行版的第三方源,而这个源里的软件丰富程度大大超过各个Linux发行版。
类似的还有snapd和AppImage的解决方案,可以跨Linux发行版实现二进制兼容。不过snapd是ubuntu主导的,服务器在国外,服务端闭源,国内没有镜像,简中网络访问比较慢。而AppImage不仅体积特别大,而且兼容性也不是很好,尤其是输入法。
安装flatpak
受限要在发行版内安装flatpak软件包,不同的发行版安装方法不同,但是基本思路都是一样的。比如说openSUSE就是:
sudo zypper install flatpak
安装了flatpak软件包后,还要设定软件源,比如说最大的软件源flathub
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
KDE、gnome都有自己的软件源,但是flathub最大,而且几乎把其他的软件源都囊括了,而且如果用户需要安装KDE、gnome的软件,大概率发行版有自己的软件包。
如果确实需要,那么可以
flatpak remote-add --gpg-import=gnome-sdk.gpg --if-not-exists gnome-apps https://sdk.gnome.org/repo-apps/ # 添加gnome源
切换国内镜像
flathub的服务器在国外,简中网络访问慢,不过上海交大做了一个国内的镜像
上海交通大学 Linux 用户组 软件源镜像服务
所以切换到交大镜像
sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub
如果出现了错误,可以尝试
wget https://mirror.sjtu.edu.cn/flathub/flathub.gpg
sudo flatpak remote-modify --gpg-import=flathub.gpg flathub
按照交大的说法,它并没有镜像flathub的所有软件,而是根据用户下载来镜像,在用户首次访问一个没有镜像过的软件时,交大镜像没有提供下载文件,但是交大镜像会随后去镜像,并缓存在自己的服务器上,这样等到用户下一次来下载时,就有缓存文件来加速了。
查找和安装软件
可以访问
Flathub - 适用于 Linux 的应用
然后根据需要查询需要的软件,查找到以后,在软件的介绍页面,有一个“安装”按钮,点击旁边的下拉按钮,还可以看到安装和运行的命令。
在terminal里运行安装命令就可以安装。安装好以后很多软件会在系统开始菜单添加一个启动项,所以运行的时候一般不需要通过terminal运行。
也可以在terminal运行
flatpak search <package_name>
这样会遍历已经添加的所有源,查找相应的软件包
还可以
flatpak info <package_name>
查询包的信息,这个和在网页上查找到的信息一致
如果有多个源有同一个软件包,那么可以
flatpak install <remote_repo> <package_name>
这样可以从指定的源来安装
所有的软件都会安装在~/.var/app/目录下
管理和删除软件
flatpak可以安装一个warehouse的软件,可以提供图形界面管理flatpak的一切。可以使用前面的方法到flathub查询这个warehouse,然后按照提示安装即可。
可以在terminal里运行
flatpak list
列出系统内安装的所有的flatpak软件包,注意里面的ID这一列。如果因为terminal窗口太小而没有完全显示的话,可以把terminal窗口调大,然后重新运行,就能看到完整显示了。
如果要删除的话,可以运行
flatpak uninstall <package_ID>
删除的时候一定要用ID来删除,所以一定要看清完整的ID啊
如果需要更新,则运行
flatpak update