在 KDE/X11 下把浏览器扩展封装成一个独立托盘应用
有些应用没有正式的 Linux 原生客户端,但提供了浏览器扩展版,或者可以通过 Chromium 系浏览器运行。直接在浏览器里使用当然可以,但体验上总觉得不够独立:它会混在普通浏览器标签页里,也不方便固定到任务栏,更不像一个真正的桌面应用。 这次尝试的目标是:把一个浏览器扩展版的即时通讯工具封装成一个独立的桌面应用。点击图标后,它以单独窗口打开,有自己的图标、自己的浏览器 profile、自己的桌面入口,并且可以最小化到 KDE 系统托盘中。最终效果接近一个原生聊天软件。 一、目标 目标不是安装一个真正的原生 Linux 客户端,而是通过以下方式实现类似体验: 最终希望达到的行为是: 这样它就不会和普通浏览器混在一起,也不会占用日常浏览器 profile。 二、基本架构 整体架构可以分为四部分: 逻辑链条是: 这里的重点是:浏览器程序本体仍然使用系统已经安装好的浏览器,真正独立的是 profile 数据目录和启动方式。 三、项目目录命名 为了长期维护,目录名不建议直接使用过于通用的名字,比如: 这些名字可能和官方应用、浏览器自身 profile、第三方客户端产生混淆。 更合适的是使用一个本地项目式名称,例如: 这个名字不绑定具体浏览器,也不绑定具体技术实现。以后即使从 Brave 换成 Chromium,或者从某个扩展换成另一个 Web App,目录名也不需要改。 目录结构大致如下: 四、启动脚本 核心启动脚本是 launch.sh。 示例: 这里有几个关键点。 –user-data-dir 用来指定独立 profile。这样这个应用不会和普通浏览器共享登录状态、扩展、缓存、历史记录。 –app 用来让浏览器以接近独立应用窗口的方式打开页面,而不是普通浏览器窗口。 –class=ChatApp 用来帮助 KDE / KWin 识别窗口身份。否则这个窗口可能会被归类到普通浏览器下面,任务栏图标也会和普通浏览器叠在一起。 …