系统装完、桌面也配得差不多了,剩下就是软件。

之前配置篇里说应用单独开一篇,这篇就是。我现在的原则很简单:系统层用 pacman,应用层尽量别往系统里塞。能 Flatpak、玲珑、APM、AppImage 解决的就走这些,AUR 和 pacman 只装必要的。用下来最大的感受就是系统稳定很多,滚动更新很少再被某个第三方包卡住。

先看现在大概装了多少东西:

来源 数量 我拿来装什么
pacman 864 个包,109 个显式安装 内核、驱动、桌面、开发工具这些系统层的东西
AUR 14 个 Chrome、JetBrains Toolbox、VMware、壁纸引擎、星火商店这些不好替代的
Flatpak 28 个引用 / 9 个应用 Firefox、VS Code、OBS、FinalShell 这些 GUI 应用
玲珑 3 个应用 + 运行时 WPS、Edge、微信开发者工具
APM 5 个应用 + 基础环境 钉钉、网易云、百度网盘、Apifox、Trae CN
AppImage 5 个 微信、QQ、Motrix、Oryxis、玲珑商店
Docker 33 个镜像 / 1 个运行中容器 开发用的数据库、消息队列、Nginx 这些

AUR 那 14 个里还有 debug 包和依赖,真正主动装的没那么多。

软件都从哪来

pacman 和 AUR:只装系统件和没替代的

pacman 在 Arch 里是绕不开的,内核、驱动、PipeWire、fcitx5、Hyprland、Docker、Flatpak 这些都得靠它。我尽量只用 pacman 装系统层的东西,不把各种 GUI 应用往里塞。

AUR 也一样,能不用就不用。现在 AUR 里主要是这些:

  • google-chrome
  • jetbrains-toolbox
  • vmware-workstation + vmware-host-modules-dkms-git
  • linux-wallpaperengine-git
  • hyprmoncfg
  • spark-store + amber-package-manager
  • nautilus-admin-gtk4、folder-color-nautilus 这类 Nautilus 小扩展

这些东西要么官方仓库没有,要么 Flatpak / 玲珑里没有合适的替代,只能上 AUR。像浏览器、编辑器、聊天软件,能走 Flatpak 或玲珑的我都尽量走那边。

原因也很简单:AUR 包是社区维护的,版本新,但质量参差不齐;pacman 里第三方包一多,滚动更新的时候依赖冲突的概率就上去了。我现在基本是“系统件 pacman,应用走独立渠道”,更新的时候心里踏实很多。

Flatpak

Flatpak 现在装了 9 个应用:

  • Firefox
  • Visual Studio Code
  • OBS Studio
  • FinalShell
  • LocalSend
  • Flatseal
  • Warehouse
  • Gear Lever
  • Ark

Flatpak 的好处是运行时独立,不往系统里塞依赖,升级也走自己的通道。代价是体积大、第一次启动慢一点,有些应用还要用 Flatseal 调权限。

我一般这么配:

  • Flatseal:改 Flatpak 应用的文件系统、网络、设备权限;
  • Warehouse:看已安装的 Flatpak、清缓存、降级;
  • Gear Lever:主要拿来管 AppImage,后面说。

主题方面不用担心,Noctalia 会把 GTK3 / GTK4 的配色一起生成,Flatpak 应用也能跟着变。

玲珑

玲珑(linyaps)主要拿来装国内应用:

  • WPS Office
  • Microsoft Edge
  • 微信开发者工具

再加 deepin 的基础运行时。用 ll-cli list 就能看到装了什么。

玲珑之前有个问题:反复装删之后 ll-cli 状态容易不对。我把这个情况反馈给玲珑官方开发者之后,他们在最新的玲珑商店前端里加了自动检测和修复。现在遇到状态不对,先更新商店前端,再按官方文档清缓存,基本不用像以前那样反复重装。

星火商店和 APM

星火应用商店我主要拿来装 Deepin / Debian 生态的 .deb 应用,底层是 APM(Amber Package Manager)。

现在 APM 里装的应用:

  • 钉钉
  • 网易云音乐(otohime)
  • 百度网盘
  • Apifox
  • Trae CN

另外还有 amber-pm-bookworm、amber-pm-trixie 这些基础环境。apm list --installed 能看完整的列表。

这套适合“只有 .deb、没有 Arch 包”的国内软件。它跟 pacman 是两套体系,更新的时候用 apm update,我一般交给 sysup 一起跑。

AppImage

AppImage 我放在 ~/AppImages,现在有:

  • 微信
  • QQ
  • Motrix
  • Oryxis
  • 玲珑应用商店社区版

微信和 QQ 没有特别省心的 Arch 包,Flatpak 里也没有官方版本,AppImage 算是最不折腾的方式:给执行权限,直接跑。想塞进启动器就用 Gear Lever 处理一下。

缺点也明显:更新得自己手动换文件,不像 Flatpak / 玲珑那样有统一的升级入口。所以我一般只在“没有更好选择”的时候用 AppImage。

统一入口和常用脚本

软件来源一多,记命令就烦。我平时用 app 这个小工具统一管这些来源:

来源 说明
pacman Arch 官方仓库
yay AUR
flatpak Flatpak
ll 如意玲珑
apm 星火应用
appimage AppImage

app search、app install、app list、app update 都是同一套用法,底层还是调各自的命令,只是不用来回记。

app update 默认排除了 pacman 和 yay,系统更新还是走 sysup,避免两个入口同时动系统包。

sysup 是 UP主 SHORiN 的脚本,我拿来放在 ~/.local/bin,流程大概是:

  1. Btrfs 上先打快照;
  2. 检查 mirrorlist,必要时重新跑 reflector;
  3. 同步数据库、更新 keyring;
  4. paru / yay -Su 升级系统;
  5. 更新 Flatpak、玲珑、APM;
  6. 重新生成 GRUB 配置。

这样系统包和第三方应用的更新是分开的,出问题也容易定位。

~/.my_shell_expansion 里还有几个常用的:

命令 作用
myenv Java / Node.js / Python 多版本管理,java use 21 这种
sysbak 基于 snapper 的系统快照备份管理
deb .deb 转成 APM 包再安装
pyvenv Python 虚拟环境管理,use / activate 会自动 eval 到当前 shell

Docker + Portainer CE

开发用的数据库、消息队列、Nginx 这些,我不喜欢直接装宿主机上。现在统一用 Docker,管理界面用 Portainer CE。

当前环境:

项目 版本 / 说明
Docker 29.9.2
docker compose 5.6.1
Portainer CE 2.39.3
Portainer 管理页 https://127.0.0.1:9443
当前运行容器 只有 portainer 一个

Portainer 自己也是用 compose 起的,文件在 ~/Docker/compose/docker-compose.yml。它挂了:

1
2
3
4
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $HOME/Docker/data/portainer:/data
- $HOME/Docker/compose:/data/compose

/var/run/docker.sock 是让 Portainer 能管理 Docker;~/Docker/data/portainer 放 Portainer 自己的数据;~/Docker/compose 放它管理的 stack 文件。

平时开发要用数据库或者中间件的时候,我就在 Portainer 里起一个 stack,跑完就停。直接用 pacman 装 Postgres / Nginx 也不是不行,但版本切换和清理都麻烦,容器用完就停更适合我。现在镜像里留着 Postgres、Redis、RabbitMQ、Nginx、Consul、Hadoop 这些,容器平时不是全开着的,所以 docker ps 里通常只有 Portainer。

数据目录我统一放在 ~/Docker/data 下面,按服务分目录,比如 postgres、consul、hadoop 这些。备份的时候把 ~/Docker/data 和 ~/Docker/compose 打包就行,容器删了数据还在。

这套的好处:

  • 数据库、消息队列不污染宿主机,版本随便换;
  • 不想要了直接删容器,不用 pacman -Rns 清依赖;
  • 端口、网络、数据卷都能在 Portainer 里看清楚;
  • 开发环境和系统环境分开,滚动更新时少一层干扰。

注意一点:Portainer 挂了 docker.sock,权限很大,9443 别直接暴露到公网。我一般只在本机或者内网用,需要远程就套一层 VPN / 隧道。

为什么说这样更稳

我不是说 Arch 本身不稳定,而是“什么都往 pacman / AUR 里装”容易不稳。

现在这套的分工是:

  • 系统层:pacman,只装内核、驱动、桌面、基础工具;
  • GUI 应用:Flatpak / 玲珑 / APM / AppImage,各自带运行时;
  • 开发依赖:Docker,按需起;
  • 更新:sysup 先快照,再更新系统,最后更新第三方应用。

应用不跟系统抢依赖,滚动更新的时候冲突就少。再加上更新前有 Btrfs 快照,真出问题也能回滚。这也是我现在觉得 Arch 在合理的软件控制下很稳定的原因。

踩过的坑

坑 现象 处理
玲珑状态异常 反复装删后 ll-cli 状态不对 官方最新商店前端已加自动检测修复;先更新前端,再按文档清缓存
AppImage 更新 不会自动升级 手动换文件,或者用 Gear Lever 管
Portainer 数据 容器删了怕数据没 数据目录 bind mount 到 ~/Docker/data,备份这个目录
Portainer 权限 挂了 docker.sock,等于 Docker root 别把 9443 暴露公网,远程走 VPN / 隧道
Flatpak 权限 应用读不到文件 用 Flatseal 放权限,别直接 --filesystem=host 全开
APM / 星火 不是 Arch 原生包 只拿来补国内 .deb 应用,系统包还是 pacman

参考

上一篇:Arch Linux 桌面配置:Hyprland、Noctalia 与我的日常环境。安装篇:Arch Linux 安装实录:Windows 双系统、Btrfs 与 GRUB。