Flatpak基础使用

列出已安装的软件包

只列出App:

1
flatpak list

也可以:

1
flatpak list --app

只列出Runtime:

1
flatpak list --runtime

列出System App:

1
flatpak list --system

列出User Runtime:

1
flatpak list --user --runtime

卸载软件包

卸载特定软件包:

1
flatpak uninstall <ID>

卸载所有无用(useless)的运行时和扩展(相当于 apt-get autoremove:

1
flatpak uninstall --unused

升级软件包

升级所有已安装软件包:

1
flatpak update

升级所有User范围内的软件包:

1
flatpak update --user

升级某个特定的软件包:

1
flatpak update <ID>

搜索软件包

类似apt search

1
flatpak search <keyword>

关键字可以是ID内出现的字符串(与ID相关),也可能是软件包描述内出现的字符串(与描述有关);

在某一个源内搜索软件包:

1
2
3
4
# 找带关键字的所有软件包 -> grep过滤出特定的源
flatpak search <keyword> | grep <repo_name>
# 列出特定源里的所有软件包 -> grep过滤出特定的软件包(需要keyword与ID相关)
flathub remote-ls <repo_name> | grep <keyword>

安装软件包

在不知道软件包的ID时,可以直接使用关键字,flatpak会查找所有匹配的项并询问要安装哪个:

1
flatpak install <keyword>

知道软件包的ID时,可根据ID直接安装:

1
flatpak install <ID>

知道软件包源和软件包ID时,可安装指定源内的某软件包:

1
flatpak install <repo_name> <ID>
  • 控制安装软件的范围:加--system--user
  • 控制安装软件的版本(即安装某个旧版本而不是最新版):使用ID三元组
    • flatpak可自动检测当前系统的架构,三元组可简写为二元组,例如:org.blender.Blender/x86_64/stable -> org.blender.Blender//stable

有些情况下,软件包所在的软件包源(Repo)系统中并没有添加(比如第三方源,或者本地源),此时若软件包提供者提供了flatpakref文件,软件包可以在不添加源的情况下安装;

1
flatpak install <flatpakref_url>

修复软件包

软件包的文件丢失或出错,可以联网快速修复:

1
flatpak repair

修复操作包括校验安装的所有软件包、重新下载安装文件缺失或出错的软件包、删除没被任何ostree commit引用的文件,等。

可以使用--system--user指定修复的范围。

查询flatpak操作历史

会列出flatpak的拉取(pull)、部署(depoly)、卸载(uninstall)等动作的历史记录;

1
flatpak history

查询软件包的详细信息

需要是已安装的软件包的ID;

1
flatpak info <ID>

会给出类似下面的输出(LANG=en-US.UTF-8):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Blender - Free and open source 3D creation suite

ID: org.blender.Blender
Ref: app/org.blender.Blender/x86_64/stable
Arch: x86_64
Branch: stable
Version: 3.4.1
License: GPL-3.0
Origin: flathub
Collection: org.flathub.Stable
Installation: system
Installed: 879.3?MB
Runtime: org.freedesktop.Platform/x86_64/22.08
Sdk: org.freedesktop.Sdk/x86_64/22.08

Commit: 477316037ec442424b97d3d5fddc898d5908f47af6b3976ded5d070f8ed72d38
Parent: 9bcff42b740d86faf8e64484ed5bcab9b0598c47ee0eebb604c7c52f1a9c2233
Subject: [fix #18] enable spnav socket (e10330e0)
Date: 2022-12-28 14:15:54 +0000

查询哪些软件包正在运行

需要以和运行软件时相同的用户身份进行查询(查询userA正在运行的软件包就su userA);

类似 docker ps

1
flatpak ps

有时只需要软件包ID或者是只需要实例ID,可以使用参数--columns=<column_name>进行输出限定;column_name是输出列的英文名称;

1
2
3
4
# 只看实例ID列
flatpak ps --columns=instance
# 只看ID和PID两个列
flatpak ps --columns=application,pid

强制退出正在运行的软件包

kill不同,不能用于发送信号,只能用于强制停止软件包运行;

类似 docker stop

1
flatpak kill <ID>

使用命令行运行软件包

有时需要对软件包进行这些操作:

  • 查看软件包对stdout的输出(log等);
  • 给软件包增加启动参数(例如给Discord软件包增加--proxy-server=<url>使Discord通过代理连接服务器);
  • 修改、增加或删除软件包中的环境变量;
  • 强制使软件包使用某个运行时;
  • 修改软件包的入口点(使用自定义的软件包启动命令);
  • 临时赋予软件包某些权限,如允许访问某些文件系统(路径等)、允许访问特定设备(共享内存等)……

类似docker run

直接运行:

1
flatpak run <ID>

增加启动参数:

1
2
3
flatpak run <ID> <params>
# 例如:
flatpak run com.discordapp.Discord --proxy-server=http://127.0.0.1:7890

其他常用的命令参数,参数需要放到软件包ID的前面

  • 环境变量
    • 修改或增加:--env=<var_name>=<var_value>
    • 删除:--unset-env=<var_name>
  • 入口点
    • 修改运行软件包时执行什么命令:--command=<command>
  • 强制指定运行时(需要ID或ID三元组)
    • --runtime=<ID>
  • 临时修改权限相关设置
    • 文件系统:--filesystem--nofilesystem
    • 规则:--add-policy--remove-policy
    • 设备:--device--nodevice
    • Socket:--socket--nosocket
    • ……
  • 其他选项可参照官方文档了解

进入正在运行的软件包的环境

flatpak的软件包运行在相对独立的环境中(类似于容器),因此只能通过命令进入正在运行中的软件包的环境;需要正在运行中的软件包的实例ID;

类似docker exec

1
flatpak enter <instance_id> <command>

软件包的权限

要查看某个软件包获取了哪些权限:

1
flatpak permission-show <ID>

修改软件包的权限:不推荐直接使用命令行修改,可以使用软件包 Flatseal

若软件包出现权限问题,可尝试重置软件包权限解决:

1
flatpak permission-reset <ID>

软件包源

与直接编辑配置文件增加/删除软件源不同,软件包源是通过flatpak命令行增删和管理的;

查看当前已有的源:

1
2
3
4
# 会显示源的名称(Repo name)和源的选项(Options)
flatpak remotes
# 如果要显示源的链接、优先级等详细信息:
flatpak remotes --show-details

删除某个源:

1
flatpak remote-delete <repo_name>

添加某个源:软件包源的维护者会提供源的描述文件(.flatpakrepo),而添加源时需要这个描述文件的位置;

1
flatpak remote-add <repo_name> <flatpakrepo_url>

其他常用的命令参数

  • 指定作用域:--user--system
  • 关闭GPG签名校验,测试时非常好用:--no-gpg-verify
  • 本地导入源的GPG密钥:--gpg-import=<gpg_file_url>
  • ……
  • 其他选项可参照官方文档了解

添加源时没有使用命令行参数设置选项,可在以后使用命令行修改;

1
flatpak remote-modify <repo_name>

软件包源内的软件包

查看某个软件包源内包含的所有软件包:

1
flatpak remote-ls <repo_name>

查看某软件包源内某个软件包的具体信息:

1
flatpak remote-info <repo_name> <ID>
评论