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的服务器在国外,简中网络访问慢,不过上海交大做了一个国内的镜像
所以切换到交大镜像
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同步完了,再来交大镜像下载,速度就快了。
查找和安装软件
可以访问
然后根据需要查询需要的软件,查找到以后,在软件的介绍页面,有一个“安装”按钮,点击旁边的下拉按钮,还可以看到安装和运行的命令。
在terminal里运行安装命令就可以安装。安装好以后很多软件会在系统开始菜单添加一个启动项,所以运行的时候一般不需要通过terminal运行。
也可以在terminal运行
flatpak search <package_name>
这样会遍历已经添加的所有源,查找相应的软件包
还可以
flatpak info <package_name>
查询包的信息,这个和在网页上查找到的信息一致
如果有多个源有同一个软件包,那么可以
flatpak install <remote_repo> <package_name>
这样可以从指定的源来安装
管理和删除软件
flatpak默认的安装目录是/var/lib/flatpak,安装的软件包有时会依赖一些基础库,这些基础库都会安装在/var/lib/flatpak/runtime,而软件包被安装在/var/lib/flatpak/app
在用户目录~/.var/app目录下保存着各个软件包的缓存、用户配置、存档等文件
flatpak可以安装一个warehouse的软件,可以提供图形界面管理flatpak的一切。可以使用前面的方法到flathub查询这个warehouse,然后按照提示安装即可。
可以在terminal里运行
flatpak list
列出系统内安装的所有的flatpak软件包,注意里面的ID这一列。如果因为terminal窗口太小而没有完全显示的话,可以把terminal窗口调大,然后重新运行,就能看到完整显示了。
如果要删除的话,可以运行
flatpak uninstall <package_ID>
删除的时候一定要用ID来删除,所以一定要看清完整的ID啊
如果需要更新,则运行
flatpak update
当一些软件包安装时,往往会依赖一些flatpak基础包,当软件包更新以后,旧版的基础包可能就不需要了。也可能当用户删除一些软件时,它所依赖的基础包就不需要了。此时需要删除旧版基础包以减少磁盘空间的占用。
flatpak uninstall --unused