Whisper 對近乎無聲的音訊會幻覺出這幾句(訓練資料 YouTube 影片結尾很多)。代表 麥克風沒在收聲。
UI 在錄音時的橫向音量條會直接讓你看到:
/tmp/mori-last-recording.wav(每次錄音都會存),
用任何播放器聽看實際捕到什麼。Ctrl+Alt+Space 沒反應第一次啟動 Mori 時,GNOME 應該會跳一個權限對話框問你要不要讓 Mori 註冊全域熱鍵 — 點「新增(Add)」。如果當時誤點拒絕:
# 讓 Mori 重新跳對話框(刪掉 portal 的 per-app 紀錄)
rm -rf ~/.local/share/xdg-desktop-portal/permissions
# 重啟 Mori
若是 X11 / macOS / Windows 走的是 tauri-plugin-global-shortcut,熱鍵直接生效不用授權。
portal global shortcut unavailablelog 看到這段:
ERROR mori_tauri: portal global shortcut unavailable — use the UI toggle button to trigger Mori
e=register host app id with xdg-desktop-portal Registry
Caused by:
A portal frontend implementing `org.freedesktop.host.portal.Registry` was not found
這代表你的 xdg-desktop-portal 太舊,沒實作 org.freedesktop.host.portal.Registry
interface(Mori 用這個 interface 跟 portal 註冊 app id,才有資格申請 GlobalShortcuts)。
Mori 設計時假設 Ubuntu 26.04(GNOME 48 + xdg-desktop-portal 1.20+),24.04 LTS ship 的
1.18.x 還沒這個 interface。
確認版本:
dpkg -l xdg-desktop-portal xdg-desktop-portal-gnome | awk '/^ii/ {print $2, $3}'
# 需要 xdg-desktop-portal ≥ 1.19,xdg-desktop-portal-gnome ≥ 47
XDG_SESSION_TYPE=x11 會自動走 tauri-plugin-global-shortcut
路徑(XGrabKey 直接 grab,不需 portal),全域熱鍵立即生效不用授權對話框。host.portal.Registry interface,GNOME 會跳權限對話框讓你綁鍵。確認 Mori 走哪條 path,看 log 第一行:
INFO mori_tauri: X11 session detected — using tauri-plugin-global-shortcut
# 或
INFO mori_tauri: non-X11 session detected — using xdg-desktop-portal GlobalShortcuts
注意:XWayland(在 Wayland session 內跑 X11 app)不算 X11 session —
XDG_SESSION_TYPE 仍是 wayland,Mori 走 portal 路徑(XGrabKey 在 XWayland
被 compositor 擋掉,所以 plugin 在那邊也不會 work)。
Ctrl+Alt+Esc 中斷鍵沒反應GNOME 預設綁了 cycle-panels,要先解掉:
gsettings set org.gnome.desktop.wm.keybindings cycle-panels "[]"
pkg-config: alsa not foundcpal 需要 ALSA 開發 headers — 你跳過了 Linux Quick Start 那步 system deps 安裝:
sudo bash scripts/install-linux-deps.sh
(repo 自帶,跟 CI 跑同一份;只想補 alsa 的話 sudo apt install libasound2-dev 也行。)
brand-1 之前的問題 — 因為 chat_bubble / picker 是 visible: true off-screen 載入,
每個都進 dock。已修。如果還看到,可能是:
cargo watch 開發模式留下 orphan binary — 用 pgrep mori-tauri 看,kill 掉.desktop 檔的 StartupWMClass 跟 Tauri 實際 WM_CLASS 不對齊 — 預設是
StartupWMClass=Mori-tauri(注意大寫),若手動改過要對齊Wayland paste-back 用 ydotool,需要 user 在 input group + daemon 跑著。
# 加 input group
sudo usermod -aG input $USER
# 啟動 ydotoold daemon(user service)
systemctl --user enable --now ydotoold
# 重開機讓 group 生效
X11 用 xdotool(sudo apt install xdotool),不用權限。
brand-3 切 theme 不會 reload window,直接覆寫 CSS variables。如果看到閃白:
~/.mori/themes/<stem>.json 格式錯誤 — 開 dev console 看 console.error 訊息dark.json / light.json 複製 keys 全集再改Wayland 對 hide/show 反覆切換的視窗 focus 給不穩。已改用「保持 visible 但 setPosition off-screen」 策略,5K-1c 起應該都 ok。如果還有問題:
tauri.conf.json 的 picker window visible: false 起跑Ctrl+Alt+P 後 dev console 應該看到 picker 視窗的 [picker] open log任何「Mori 回應怪 / spawn 失敗 / API call 沒結果」這類問題,**第一步先看 Logs tab**。
v0.4.0 起 Mori 自動把每次 LLM call / spawn error / fallback / redaction 寫進
~/.mori/logs/mori-YYYY-MM-DD.jsonl(JSONL append-only,跨平台一致):
tail -f ~/.mori/logs/mori-2026-05-15.jsonl | jq .(Win 走 PowerShell Get-Content -Wait)kind(llm_call / spawn_error / redaction / fallback)+ provider /
model / latency_ms / ok / error。
ok=false 那筆通常就是兇手過去常見錯誤(v0.4.0 之前):
provider chat (round 0): spawn `C:\Users\yazel\AppData\Roaming\npm\gemini.cmd`: batch file arguments are invalid
原因:Rust 1.77.2+ 因 CVE-2024-24576 fix,直接 spawn .cmd / .bat
帶 args 會被擋。**v0.4.0 起 Mori 已自動處理** — cli_command() helper 看 binary
是 .cmd / .bat 時包一層 cmd /C,Rust 看到的 spawn target
是 cmd.exe (regular PE) 就過了。
**現在 Windows 推薦做法**(v0.4.0+):
"binary": "gemini"(Mori 自動探 PATH 上的 gemini.cmd)"binary": "C:\\Users\\\\AppData\\Roaming\\npm\\gemini.cmd" Codex 在 Windows 額外注意:@openai/codex@0.7 是 @native release,只有
Linux / macOS native binary,**Windows 直接拒絕跑**(`Unsupported platform: win32`)。
升級到 0.130+ 的純 JS 版才跨平台。
到 GitHub Issues。 請附:
~/.mori/logs/mori-YYYY-MM-DD.jsonl 對應時間附近的幾筆 event(Logs tab 可看)