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开发, 前端工程, 可视化界面, 图形渲染, 多媒体播放, 安全防御评估, 无头浏览器, 暗色界面, 浏览器, 终端, 请求拦截, 通知系统