flatpak命令

flatpak 命令 #

flatpak是一个用于构建、分发和运行沙盒化应用程序的工具。它提供了一种在不同 Linux 发行版上一致运行应用程序的方式,应用程序在沙盒中运行,与系统其余部分隔离,提高了安全性和兼容性。

语法 #

flatpak [选项] 命令 [参数...]

常用命令 #

命令 描述
install 安装应用程序或运行时
update 更新应用程序或运行时
uninstall 卸载应用程序或运行时
list 列出已安装的应用程序和运行时
info 显示应用程序或运行时的信息
search 搜索远程仓库中的应用程序
run 运行应用程序
override 覆盖应用程序权限
make-current 将应用程序版本设为当前版本
remote-add 添加远程仓库
remote-delete 删除远程仓库
remote-list 列出配置的远程仓库
remote-info 显示远程仓库信息
remote-ls 列出远程仓库中的应用程序
repair 修复 Flatpak 安装
create-usb 将应用程序导出到 USB 驱动器
enter 进入应用程序的命名空间
ps 列出正在运行的 Flatpak 实例
kill 终止正在运行的 Flatpak 实例
documents 列出导出的文档
document-export 导出文件到应用程序
document-unexport 取消导出文件
permission-list 列出权限
permission-show 显示应用程序权限
permission-reset 重置应用程序权限
build-init 初始化构建目录
build 在构建目录中运行命令
build-finish 完成构建
build-export 导出构建到仓库
build-bundle 创建单文件包
build-import-bundle 从单文件包导入
build-sign 签名应用程序或运行时
build-update-repo 更新仓库元数据

常用选项 #

全局选项 #

选项 描述
-h, --help 显示帮助信息
-v, --verbose 显示详细输出
--ostree-verbose 显示 OSTree 调试信息
--version 显示版本信息
--default-arch 显示默认架构
--supported-arches 显示支持的架构
--gl-drivers 显示可用的 GL 驱动程序
--installations 显示系统安装位置
--user 用户模式操作
--system 系统模式操作
--installation=NAME 使用指定的安装

安装选项 #

选项 描述
--arch=ARCH 指定架构
--no-related 不安装相关的运行时
--no-deps 不安装依赖
--no-pull 不下载新数据
--reinstall 重新安装应用程序
--app 仅查看应用程序
--runtime 仅查看运行时
--bundle 从 bundle 文件安装
--from 从指定的远程仓库安装
--sideload-repo 从本地仓库安装
--gpg-file=FILE 用于验证的 GPG 密钥

运行选项 #

选项 描述
--command=COMMAND 运行指定命令
--cwd=DIR 在指定目录中运行命令
--branch=BRANCH 使用指定分支
--arch=ARCH 使用指定架构
--devel 使用开发版本
--log-session 启用会话日志
--log-system 启用系统日志
--no-documents-portal 不使用文档门户
--file-forwarding 启用文件转发
--share=SHARE 共享系统命名空间
--socket=SOCKET 共享系统套接字
--device=DEVICE 共享系统设备
--allow=FEATURE 允许特性
--env=VAR=VALUE 设置环境变量
--env-fd=FD 从文件描述符读取环境变量
--own-name=NAME 允许拥有 D-Bus 名称
--talk-name=NAME 允许与 D-Bus 名称通信
--system-own-name=NAME 允许拥有系统 D-Bus 名称
--system-talk-name=NAME 允许与系统 D-Bus 名称通信
--persist=FILENAME 持久化文件

常见用法 #

1. 添加远程仓库 #

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

这将添加 Flathub 仓库,这是最流行的 Flatpak 应用程序仓库。

2. 列出远程仓库 #

flatpak remote-list

3. 搜索应用程序 #

flatpak search application_name

例如:

flatpak search firefox

4. 安装应用程序 #

flatpak install flathub application_id

例如:

flatpak install flathub org.mozilla.firefox

5. 安装应用程序(用户模式) #

flatpak install --user flathub application_id

6. 运行应用程序 #

flatpak run application_id

例如:

flatpak run org.mozilla.firefox

7. 列出已安装的应用程序 #

flatpak list

8. 列出已安装的应用程序(详细信息) #

flatpak list --app --columns=name,application,version,branch,size,origin

9. 更新所有应用程序 #

flatpak update

10. 更新特定应用程序 #

flatpak update application_id

11. 卸载应用程序 #

flatpak uninstall application_id

12. 卸载未使用的运行时和扩展 #

flatpak uninstall --unused

13. 显示应用程序信息 #

flatpak info application_id

14. 显示应用程序历史版本 #

flatpak info -h application_id

15. 查看应用程序权限 #

flatpak info --show-permissions application_id

16. 覆盖应用程序权限 #

flatpak override --socket=wayland --nosocket=x11 application_id

17. 重置应用程序权限 #

flatpak override --reset application_id

18. 列出正在运行的 Flatpak 实例 #

flatpak ps

19. 终止正在运行的 Flatpak 实例 #

flatpak kill application_id

20. 修复 Flatpak 安装 #

flatpak repair

高级用法 #

1. 安装特定版本的应用程序 #

flatpak install flathub application_id/branch

例如:

flatpak install flathub org.mozilla.firefox/beta

2. 从本地文件安装应用程序 #

flatpak install --bundle application.flatpak

3. 导出应用程序到 USB 驱动器 #

flatpak create-usb /path/to/usb application_id

4. 从 USB 驱动器安装应用程序 #

flatpak install --sideload-repo=/path/to/usb application_id

5. 进入应用程序的命名空间 #

flatpak enter application_id command

例如:

flatpak enter org.mozilla.firefox bash

6. 运行应用程序的特定命令 #

flatpak run --command=command application_id

例如:

flatpak run --command=bash org.mozilla.firefox

7. 设置应用程序环境变量 #

flatpak run --env=VAR=VALUE application_id

例如:

flatpak run --env=MOZ_ENABLE_WAYLAND=1 org.mozilla.firefox

8. 允许应用程序访问特定目录 #

flatpak override --filesystem=/path/to/directory application_id

9. 允许应用程序访问设备 #

flatpak override --device=all application_id

10. 允许应用程序访问系统总线 #

flatpak override --system-talk-name=org.freedesktop.login1 application_id

11. 导出文件到应用程序 #

flatpak document-export --app=application_id /path/to/file

12. 列出导出的文档 #

flatpak documents

13. 取消导出文件 #

flatpak document-unexport document_id

14. 构建 Flatpak 应用程序 #

# 初始化构建目录
flatpak build-init build-dir application_id org.freedesktop.Platform org.freedesktop.Sdk 21.08

# 在构建目录中构建
flatpak build build-dir ./configure --prefix=/app
flatpak build build-dir make
flatpak build build-dir make install

# 完成构建
flatpak build-finish build-dir --socket=x11 --share=network

# 导出到仓库
flatpak build-export repo build-dir

15. 创建 Flatpak 包 #

flatpak build-bundle repo application.flatpak application_id

Flatpak 权限 #

Flatpak 使用沙盒隔离应用程序,但可以通过权限允许访问系统资源:

共享选项 #

选项 描述
--share=network 允许网络访问
--share=ipc 允许进程间通信

套接字选项 #

选项 描述
--socket=x11 允许 X11 访问
--socket=wayland 允许 Wayland 访问
--socket=pulseaudio 允许音频访问
--socket=session-bus 允许会话 D-Bus 访问
--socket=system-bus 允许系统 D-Bus 访问

设备选项 #

选项 描述
--device=dri 允许 GPU 访问
--device=kvm 允许 KVM 访问
--device=all 允许所有设备访问

文件系统选项 #

选项 描述
--filesystem=home 允许访问用户主目录
--filesystem=host 允许访问整个主机文件系统
--filesystem=/path 允许访问特定路径
--filesystem=xdg-download 允许访问下载目录

特性选项 #

选项 描述
--allow=multiarch 允许多架构
--allow=devel 允许开发工具
--allow=bluetooth 允许蓝牙访问

Flatpak 目录结构 #

  • /var/lib/flatpak:系统级 Flatpak 安装目录
  • ~/.local/share/flatpak:用户级 Flatpak 安装目录
  • ~/.var/app/:应用程序数据目录

与其他包管理系统的比较 #

特性 Flatpak Snap AppImage 传统包管理器
沙盒隔离 有限
跨发行版兼容性
版本控制 有限
运行时共享 有限
存储效率
自动更新 有限
离线安装 有限
权限控制 细粒度 细粒度 有限

提示 #

  • 使用flatpak list --app可以只列出应用程序,不显示运行时
  • 使用flatpak list --runtime可以只列出运行时
  • 使用flatpak update --appstream可以更新应用程序元数据
  • 使用flatpak remote-ls --updates可以查看可用更新
  • 使用flatpak history可以查看 Flatpak 操作历史
  • 使用flatpak run --env=FLATPAK_DEBUG=all application_id可以启用调试输出
  • 应用程序数据存储在~/.var/app/application_id目录中
  • 使用flatpak override --reset可以重置所有应用程序权限
  • 使用flatpak remote-modify --prio=1 flathub可以更改仓库优先级
  • 使用flatpak --gl-drivers可以查看系统支持的 GL 驱动程序
  • 使用flatpak --installations可以查看系统中的 Flatpak 安装位置
  • 使用flatpak remote-info flathub application_id可以查看远程应用程序信息
  • 使用flatpak update --no-related可以只更新应用程序,不更新相关运行时
  • 使用flatpak list --columns=all可以查看所有可用的列信息
  • 使用flatpak permission-reset application_id可以重置应用程序的权限