Fix speech-to-text microphone on Linux AppImage #72

Merged
jknapp merged 1 commits from fix/linux-microphone into main 2026-11-05 14:42:33 +00:00
1 Commits
Author SHA1 Message Date
shadowdaoandClaude Sonnet 5.5 c4cb04f011 Fix speech-to-text microphone on Linux AppImage
Secret Scan / scan (push) Successful in 6s
Secret Scan / scan (pull_request) Successful in 6s
Build App (Preview) / compute-version (pull_request) Successful in 5s
Build App (Preview) / create-release (pull_request) Successful in 6s
Build App (Preview) / test (pull_request) Successful in 4m8s
Build App (Preview) / build-macos (pull_request) Successful in 3m18s
Build App (Preview) / build-windows (pull_request) Successful in 8m8s
Build App (Preview) / build-linux (pull_request) Successful in 6m48s
Build App (Preview) / prune-previews (pull_request) Successful in 2s
The mic button failed on Linux with a chain of distinct problems, each
hidden behind the previous one:

- The AppImage bundled GStreamer libraries but no plugins, so WebKitGTK
  found 0 capture devices. Enable bundleMediaFramework and install the
  GStreamer plugin packages on the CI runners.
- The bundled libpipewire had the builder's SPA plugin paths compiled in
  and failed on hosts with a different layout. finalize-appimage.sh now
  drops it so the host's is used (host-coupled, like libwayland-client).
- WebKitGTK denies getUserMedia until the embedder enables media streams
  and answers the permission request; wry does neither. Add a Linux-only
  handler for the main window that grants audio-only requests and denies
  everything else.
- getUserMedia now steps down from the saved device to the default device
  to bare audio:true on OverconstrainedError/NotFoundError, and the STT
  error shows the DOMException name.

Verified on CachyOS: permission request allowed, recording works.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 06:24:11 -08:00