Linux (GNOME Wayland): no floating capsule + hotkey depends on focused app + resilience gaps (with working prototype)

オープン
#1,156 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
linux, rust

調査の方向性

Start by reading the Linux capsule and hotkey paths, the fcitx auxiliary-text handling, the Volcengine audio worker, and the recorder and level-handler code. The proposal also introduces a GNOME Shell extension and Unix-socket state bridge, so first determine suitable integration points and split the work into independently reviewable changes. Done means the selected changes are implemented and tested; the issue does not identify specific files or tests.

索引モデルが issue の本文から書いたものです。

説明

Issue 提案:Linux(GNOME Wayland)缺少悬浮胶囊 + 热键焦点依赖 + 韧性缺口

建议发到 Open-Less/openless 的 Discussions 或 Issues(中文即可,社区以中文为主)。

标题

Linux (GNOME Wayland): no floating capsule on GNOME 50 + hotkey depends on focused app + resilience gaps found in real usage

现象(Ubuntu 26.04 / GNOME 50 / Wayland,ThinkPad E14 实测)

  1. 听写状态只有 fcitx5 辅助区纯文本:GNOME Wayland 无 layer-shell,
    GNOME 50 又移除了 X11 会话(/usr/share/xsessions 为空、gnome-shell --x11
    不存在),悬浮胶囊窗口在 GNOME 上无法存在;v2 契约也标注 Linux 无胶囊。
  2. 热键时好时坏:fcitx5-diagnose 显示 Using Wayland native input method protocol: 0——插件热键只在焦点应用恰好以 fcitx IM 模块启动时可达。焦点切到
    非 fcitx 应用后 toggle 丢失,会话卡在 Listening 持续录音 18 分钟(麦克风与
    ASR 流持续消耗),直到进程重启。
  3. 服务端抖动时的三个韧性缺口(2026-10-07 火山故障窗口实测,服务端 00:14–00:32
    收音频不识别、00:35 自愈):
    • 静默重试新连接后,旧会话 audio worker 经共享 writer 槽位把旧 seq 帧泄漏进
      新连接 → 45000000 sequence mismatch,重试必败(325 秒录音未能挽救);
    • 重试彻底失败后向已关闭 WS 持续推帧 1910 次;
    • 每次录音首块为削波垃圾(inRMS≈0.999)作为首包上行;
    • 空转写以红色 Error 胶囊呈现,用户误以为是自己出错(实际是服务端问题)。

提案(已在本机完成原型并稳定使用一周思路验证)

  1. 状态桥:emit_capsule_with_context_locked 增加 Unix socket 广播
    (~/.cache/openless/capsule-state.sock,JSON 行 state/level,30Hz);
    has_clients() 时抑制 fcitx aux 文字避免双指示。Rust 侧 ~100 行,
    #[cfg(target_os = "linux")],不影响其他平台。
  2. GNOME Shell 扩展(GJS/ESM,随附 zip):addTopChrome(reactive:false)
    悬浮渲染 GLSL Siri 流体光球(振幅主通道、亮度增益 ≤40%,对齐 Wispr Flow/
    Echo/macOS 惯例);Main.wm.addKeybinding 全局听写热键(合成器抓取,
    任意窗口可用,DBus 发 DictationKeyEvent,与插件热键天然不双触发);
    OpenLess 不在时零存在感。支持着色器 frag 热替换(2 秒调参)。
  3. 韧性修复:volcengine audio worker 加 session 代数守卫 + 发送失败 break;
    recorder 丢弃首块削波垃圾;emptyTranscript 改中性 Cancelled 胶囊。
  4. UI 电平动态化:level_handler 内噪声门+归一化+包络(静音 189 帧全 0,
    说话时幅度跟手;不影响 silence_auto_stop)。

已在本机稳定运行(听写全链路 + 光球 + 全局热键),全部代码原创、AGPL-3.0
兼容、无凭据/遥测。如果方向 OK,我可以把以上整理成分 PR 提交(状态桥+韧性
修复先行,扩展作为独立组件随后);也欢迎指出现有 v2 eframe 架构下更合适的
挂载点(Remote Input / linux-egui popup 通道)。

环境信息

  • Ubuntu 26.04.1 · GNOME Shell 50.1 · Wayland · fcitx5 5.1.19
  • OpenLess v1.3.18(deb)· 火山引擎大模型流式语音识别(API Key 链路)
主要言語
Rust
スター
3.7k
フォーク
349
平均マージ
2日 14時間
マージ済み PR(30日)
97

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Open-Less/openless のほかの issue

Open-Less/openless の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。