上周三下午,我在Ubuntu 22.04的应用抽屉里滚动时,突然停住了——有个图标我完全不认识。没印象装过,就算装过也是八百年前的事了。删掉就行?问题来了:怎么删?

是apt包?Snap?还是Flatpak?想从终端下手,得先破案——哪个工具把它塞进来的,再回忆对应命令。GNOME Software只管它自己店里的货,对来历不明的本地应用视而不见。就为这一个陌生程序,查资料、试命令,折腾了二十分钟。

打开网易新闻 查看精彩图片

我想要的很简单:一个图形界面,把所有已装应用摊开,不管从哪来的,一键删掉不要的。搜了一圈,没有干净的解决方案。于是业余时间,我开始自己写。

这就是Showcase。

一个入口,管遍所有应用

Linux应用从好几扇门进来:系统包(apt/dpkg)、Flatpak、Snap,还有独立的AppImage。每种都有自己的列表和删除语法。Showcase把它们全问一遍,所有图形应用塞进同一个网格,按来源打标签。

在这个界面里,你可以:

搜索、筛选、排序。实时搜索,按来源过滤(带实时计数)或按分类过滤,按名称、大小、最近安装时间排序。

查看任何应用的底细。点击打开详情面板:图标、版本、安装大小、安装日期、发布者、分类、包ID、完整描述。

卸载不留隐患。一键操作,走系统正常密码认证。提交前告诉你能腾出多少空间;删apt包时会警告连带依赖;系统核心包和基础Snap直接拒绝删除。

保持更新。单个应用即时检查更新,或全盘扫描后逐个或批量应用更新,每个走自己的源机制。

界面跟随系统亮暗主题。各源并行查询,某个工具慢或缺失(比如你不用Snap)不会拖慢整体。

技术实现的一些细节

Showcase是用Tauri v2写的原生桌面应用——Rust核心,SvelteKit(Svelte 5)前端。二进制体积保持小巧,质感像真正的GTK应用,而非浏览器标签套壳。

关键问题是"什么才算一个应用"。答案出乎意料地朴素:.desktop文件。这些正是出现在你应用菜单里的条目,Showcase把它们当作真相来源,再从对应的包管理器抓取元数据来丰富信息。

有两个原则从一开始就定死:

绝不以root运行。只有卸载动作本身提权,且仅限该单次操作,通过常规系统认证流程。

绝不瞎删。系统包和基础Snap有硬性保护,依赖关系变更前有明确警告。

开发过程中最耗时的部分不是界面,而是理清各包管理器的差异——Snap有"基础包"概念,Flatpak的运行时依赖链,apt的反向依赖计算。每个都要单独处理,才能在统一界面里给出一致的体验。

目前Showcase已支持Ubuntu 22.04/24.04,Debian 12,以及主流Flatpak/Snap配置。代码开源,欢迎试用和反馈。

有时候最烦人的问题,答案就是一个能看清全貌的工具。