fathyb/carbonyl

GitHub: fathyb/carbonyl

基于 Chromium 的终端浏览器,能在无图形界面的环境中原生运行完整 Web 应用并保持极低资源占用。

Stars: 17544 | Forks: 420


   O    O

    \  /

O —— Cr —— O

    /  \

   O    O

Carbonyl

Carbonyl 是一个基于 Chromium 构建的浏览器,专为在终端中运行而设计。[阅读博文](https://fathy.fr/carbonyl)。 它支持几乎所有的 Web API,包括 WebGL、WebGPU、音视频播放、动画等。 它非常轻快,启动时间不到一秒,以 60 FPS 运行,空闲时 CPU 占用率为 0%。它不需要窗口服务器(即可以在安全模式控制台下工作),甚至可以通过 SSH 运行。 Carbonyl 最初是作为 [`html2svg`](https://github.com/fathyb/html2svg) 启动的,现在则是其背后的运行时。 ## 用法 ### Docker ``` $ docker run --rm -ti fathyb/carbonyl https://youtube.com ``` ### npm ``` $ npm install --global carbonyl $ carbonyl https://github.com ``` ### 二进制文件 - [macOS amd64](https://github.com/fathyb/carbonyl/releases/download/v0.0.3/carbonyl.macos-amd64.zip) - [macOS arm64](https://github.com/fathyb/carbonyl/releases/download/v0.0.3/carbonyl.macos-arm64.zip) - [Linux amd64](https://github.com/fathyb/carbonyl/releases/download/v0.0.3/carbonyl.linux-amd64.zip) - [Linux arm64](https://github.com/fathyb/carbonyl/releases/download/v0.0.3/carbonyl.linux-arm64.zip) ## 演示
## 已知问题 - 尚不支持全屏模式 ## 对比 ### Lynx Lynx 是最早的终端 Web 浏览器,也是目前维护时间最长的浏览器。 #### 优点 - 当它能够解析页面时,Lynx 拥有最好的布局,完全为终端进行了优化 #### 缺点 - 不支持许多现代 Web 标准 - 无法运行 JavaScript/WebAssembly - 无法查看或播放媒体(音频、视频、DOOM) ### Browsh Browsh 是最早的“将普通浏览器带入终端”的项目。它以 headless 模式启动 Firefox,并通过自动化协议连接到它。 #### 优点 - 更新底层浏览器更容易:只需更新 Firefox - 这使得开发更容易:只需安装 Firefox 并在几秒钟内编译 Go 代码 - 截至目前,Browsh 支持扩展,而 Carbonyl 不支持,尽管这已在我们的开发路线图中 #### 缺点 - 它的运行速度比 Carbonyl 慢,并且需要更多资源。在显示相同内容时,平均需要多消耗 50 倍的 CPU 资源,这是因为 Carbonyl 不对窗口帧缓冲进行缩小或复制,而是直接以终端分辨率进行原生渲染。 - 它使用自定义样式表来修复布局,这不如 Carbonyl 对其 HTML 引擎 所做的更改可靠。 ## 操作系统支持 经测试,支持以下操作系统: - Linux(已测试 Debian、Ubuntu 和 Arch) - MacOS - Windows 11 和 WSL ## 贡献 Carbonyl 分为两部分:构建为共享库(`libcarbonyl`)的“核心”,以及动态加载核心(`carbonyl` 可执行文件)的“运行时”。 核心使用 Rust 编写,从头开始构建只需几秒钟。运行时是 Chromium headless shell 的修改版本,从头开始构建需要一个小时以上的时间。 如果你只是修改 Rust 代码,请构建 `libcarbonyl` 并将其替换到 Carbonyl 的发布版本中。 ### 核心 ``` $ cargo build ``` ### 运行时 几点注意事项: - 构建运行时几乎与构建 Chromium 相同,只是多了些修补和打包 Rust 库的额外步骤。`scripts/` 目录中的脚本只是对 `gn`、`ninja` 等工具的简单封装。 - 在 Linux 上构建适用于 arm64 的 Chromium 需要 amd64 处理器 - Carbonyl 仅在 Linux 和 macOS 上进行了测试,其他平台可能需要对 Chromium 进行代码修改 - Chromium 非常庞大,构建需要很长时间,这期间会使你的计算机基本处于无响应状态。使用 8 核 CPU(如 M1 Max 或 i9 9900k)并配备 10 Gbps 光纤,获取和构建大约需要 1 小时。它需要大约 100 GB 的磁盘空间。 #### 获取 ``` $ ./scripts/gclient.sh sync ``` #### 应用补丁 ``` $ ./scripts/patches.sh apply ``` #### 配置 ``` $ ./scripts/gn.sh args out/Default ``` 出现提示时,输入以下参数: ``` import("//carbonyl/src/browser/args.gn") # 取消注释此项以为 arm64 构建 # target_cpu = "arm64" # 注释此项以禁用 ccache cc_wrapper = "env CCACHE_SLOPPINESS=time_macros ccache" # 注释此项以进行 debug 构建 is_debug = false symbol_level = 0 is_official_build = true ``` #### 构建二进制文件 ``` $ ./scripts/build.sh Default ``` 这应该会产生以下输出: - `out/Default/headless_shell`: 浏览器二进制文件 - `out/Default/icudtl.dat` - `out/Default/libEGL.so` - `out/Default/libGLESv2.so` - `out/Default/v8_context_snapshot.bin` #### 构建 Docker 镜像 ``` # 使用来自 Default target 的 binaries 构建 arm64 Docker 镜像 $ ./scripts/docker-build.sh Default arm64 # 使用来自 Default target 的 binaries 构建 amd64 Docker 镜像 $ ./scripts/docker-build.sh Default amd64 ``` #### 运行 ``` $ ./scripts/run.sh Default https://wikipedia.org ```
标签:Carbonyl, Chromium, Docker, html2svg, HTML渲染, SSH, Syscall, WebGL, WebGPU, Web开发, 前端工程, 可视化界面, 图形渲染, 多媒体播放, 安全防御评估, 无头浏览器, 暗色界面, 浏览器, 终端, 请求拦截, 通知系统