Linux 计划¶
状态: 进行中的验证与能力计划。x86_64 X11 测试版、兼容 wlroots 的原生 Wayland 路径以及 Nix 打包均已实现。物理桌面/输入验证和真正的签名更新仍然是发布门槛;仅靠自动化检查无法确立这些行为。
所支持的契约范围有限¶
Linux 测试版保持其契约明确:
| 领域 | 契约 |
|---|---|
| 分发 | 签名的用户本地直接安装,或 Nix 拥有的包更新 |
| 主机 | x86_64 Linux;Arch/i3 参考环境及 NixOS 打包 |
| 桌面 | i3/X11 或兼容 wlroots 的 Wayland 合成器 |
| 音频 | 通过 ALSA 的 CPAL,通常由 PipeWire 支持 |
| 推理 | Vulkan,带 CPU 回退 |
| 快捷键 | 可配置的包含按键的组合键;默认 Alt+Space |
| 插入 | 剪贴板加 Ctrl-V,以及 Ctrl-Shift-V 终端设置 |
| UI | 单进程:按需显示的 Rune 窗口和 Rune 覆盖层 HUD(Wayland 上为 layer-shell,X11 上为 override-redirect);当存在托盘宿主时显示 StatusNotifierItem 托盘图标 |
该测试版不声称支持语音命令、应用程序或浏览器上下文、会议或通用的 Wayland 支持。Wayland 需要 wl-copy、wtype 以及兼容的合成器协议;快捷键来自 GlobalShortcuts 门户,或来自用户合成器键绑定中运行的 hex 命令。不存在隐藏的 XWayland 或特权注入回退。参见 ../linux.md 和 ../nix.md。
已实现的内容¶
- 全局按住/松开听写、Esc 取消和双击锁定。
- 可配置且持久化的快捷键绑定。
- 本地模型安装与转录。
- 带有限稳定等待的自动剪贴板插入。转录文本保留在剪贴板上;不会恢复任意先前的格式。
- CLI 麦克风覆盖。
- 每个用户一个 Hex 进程(可选在 systemd 用户单元下运行),按需提供 Rune 窗口、CLI 控制、仅属主可用的 Unix IPC、桌面启动器和自启动条目。
- 一个快捷键状态机,由 X11 抓取、Wayland GlobalShortcuts 门户或幂等的
hex dictation、hex voice-action和hex paste-last命令驱动(适用于没有门户的桌面);并提供持久的可点击穿透录制/处理覆盖层。 - 可见的监听控件、事务性快捷键编辑和显式服务关闭;关闭“设置”后托管运行时仍继续运行。
- Nix 包及匹配的开发 shell、NixOS 安装、可选的 Home Manager 用户服务,以及经过评估的会话就绪检查。
- XDG 路径、诊断信息和独占的监听器所有权。
- 签名的用户本地更新,包括有界下载、精确大小与 SHA-256 验证、原子版本激活和重启移交。
更新路径已实现,但尚未在受支持的 Arch/i3 主机上通过一次完整的签名跨版本更新得到验证。
发布脚本将直接安装程序发布为 install-linux.sh。该安装程序与应用内更新器一样,验证相同的签名源和内容寻址构件,创建受管理的版本布局,并安装 XDG 桌面和自启动条目。AUR 包是未来 Arch 原生渠道的首选;pacman 必须拥有该布局的更新。
剩余工作按能力排序¶
1. 验证签名更新路径¶
在受支持的 Arch/i3 主机上,在已发布的两个稳定版本之间执行一次真实更新。验证:
- 清单签名与单调版本强制;
- 精确的构件大小与 SHA-256 验证;
- 原子激活与应用重启;
- 保留旧版本的回滚;
- 拒绝覆盖开发版、root 或包管理器安装;
- systemd 服务重启和窗口重新打开,且无需托盘宿主。
该验证不通过,就不能宣称直接安装更新渠道已被证明。
2. 添加 X11 命令与上下文¶
仅当命令功能对等成为产品优先级时,才着手这一部分工作。添加:
- Moonshine 命令识别与唤醒/睡眠行为;
- 通过 EWMH 获取 X11 前台应用与标题;
- 适合平台的命令快捷键与应用启动;
- 为 Hex 实际暂停过的播放器提供 MPRIS 暂停/恢复;
- logind 或 XDG 空闲休眠抑制;
- 可见的上下文年龄和失败状态。
在真正的浏览器适配器提供活动 URL 之前,保持浏览器宿主命令不可用。绝不要从窗口标题推断 URL。
3. 添加手动 PipeWire 会议¶
手动会议录制先于自动检测。采集两个明确的来源:
- 选中或默认的麦克风源。
- 选中或默认输出 sink 的监听(monitor)。
每个回调必须提供来源、呈现时间戳、单调到达时间戳、采样率和单声道浮点样本。复用现有的有界 WAV 写入器、实时草稿、间隙核算、清单、恢复和原子最终发布。
处理路由替换、蓝牙配置文件更改、时钟对齐、队列压力,以及出现在输出监听中的 Hex 反馈。路由丢失必须产生可见的间隙或失败,而不是静默损坏。
4. 添加仅元数据会议提议¶
手动采集可靠后,在不录制样本的情况下观察 PipeWire 注册表节点和活动链接。将进程和媒体元数据归一化到现有的会议候选项模型中。检测仍仅作为提议(offer-only),绝不会自动开始录制。
5. 仅在具备明确能力时扩展 Wayland¶
已实现的测试版从 GlobalShortcuts 门户或用户绑定在合成器中的 hex 命令获取快捷键,外加合成器提供的剪贴板和虚拟键盘协议。它不读取任何输入设备,也不授予任何权限。更广泛的支持需要单独的能力决策:
| 契约 | 输入与插入行为 |
|---|---|
| Basic | 门户快捷键、原生剪贴板、有限的上下文、在无法注入时手动粘贴 |
| Appliance | 通过明确批准的辅助程序实现自动插入和更广泛的快捷键 |
无特权的 Wayland 不保证任意的前台插入、全局活动观察、前台应用身份或裸修饰键快捷键。不要用 XWayland 掩盖这些限制。
不要添加特定于合成器的快捷键路径或原始输入设备读取器;portal 和 hex 命令是唯一通用契约。如果确实需要设备级对等性,请单独决定一个经批准的辅助程序,不要构建通用 root 守护进程。
6. 谨慎验证分发渠道¶
应用管理的更新程序只负责用户本地的直接安装布局。Nix 负责其打包安装和可选的用户服务;未来的 Arch 软件包也必须将更新留给包管理器。每次只添加一个经过验证的渠道,对应一种架构、发行版或包格式。
保留可移植核心¶
不要按平台分叉这些模块:
- 音频捕获、单声道转换、有界投递和丢弃统计;
- 听写预卷、可增长捕获、控制和重采样;
- 转录模型、推理、处理、排序和取消;
- 命令语法和纯解析;
- 事件模式和有界投影;
- 粘贴延续和剪贴板恢复状态转换;
- 会议清单、锁定、WAV 写入、转录稿发布和恢复。
平台适配器负责原生句柄、权限和清理。不要创建一个应用全局的 Platform trait。
仅在有真实实现时添加接缝¶
| 开始的工作 | 然后引入 | 不要引入 |
|---|---|---|
| X11 命令 | 目标动作执行器 | 自动化插件注册表 |
| 前台上下文 | ContextMonitor 背后的私有提供者 |
浏览器适配器之前的浏览器框架 |
| PipeWire 会议 | 发出已有数据包事实的捕获会话 | 通用媒体图 |
| PipeWire 检测 | 仅基于元数据的麦克风活动源 | 为检测而进行的采样捕获 |
| 原生 Wayland | 运行时 X11/Wayland 能力选择 | 将 XWayland 呈现为原生支持 |
| 特权对等 | 最小化版本化辅助协议 | 通用 root 守护进程 |
| 额外打包 | 一个具体渠道和所有权规则 | 通用包抽象 |
验证¶
自动化检查仍然包括:
cargo fmt --check
cargo test
cargo clippy --all-targets --all-features -- -D warnings
git diff --check
./scripts/test-install-linux-release.sh
nix flake check
针对真实适配器运行行为测试,而不是使用重复实现假设的模拟对象。
| 功能 | macOS | X11 目标 | Wayland 目标 |
|---|---|---|---|
| 命令麦克风与唤醒/睡眠 | 必需 | 如发布则必需 | 如发布则必需 |
| 按住/释放、锁定、取消 | 必需 | 必需 | 如声明支持则必需 |
| 前台粘贴 | 必需 | 必需 | 如声明支持则必需 |
| 发送(粘贴加回车) | 必需 | 如发布则必需 | 如发布则必需 |
| 浏览器、终端、编辑器、Electron 插入 | 必需 | 必需 | 取决于能力 |
| 应用上下文 | 必需 | 如发布则必需 | 取决于能力 |
| 桌面窗口和设置 | 必需 | 必需 | 必需 |
| 手动双音轨会议 | 在开发者构建中必需 | 如发布则必需 | 如发布则必需 |
| 仅 Offer 的会议检测 | 在开发者构建中必需 | 如发布则必需 | 如发布则必需 |
| 关机和音频路由丢失恢复 | 必需 | 必需 | 必需 |
风险¶
| 风险 | 严重性 | 缓解措施 |
|---|---|---|
| 通用 Wayland 对等性不是稳定契约 | 严重 | 发布一个受限契约 |
| 原生 Wayland 插入由合成器控制 | 高 | 在兼容的合成器上验证 wl-copy/wtype;更广泛的 portal/libei 或经批准的辅助程序支持需要单独验证 |
| 前台和浏览器上下文缺少通用 API | 高 | 先使用 EWMH;稍后添加真实浏览器适配器 |
| PipeWire 输出监控包含 Hex 反馈 | 高 | 抑制反馈或构建经过过滤的捕获图 |
| PipeWire 元数据因包格式而异 | 中 | 根据观察到的样本构建身份规则 |
| 打包使原生依赖成倍增加 | 中 | 在验证通过之前只保留一个发行版和一个渠道 |
记录的决定¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 hex19/hex