fix(stt): détection navigateur cross-distro (AlmaLinux/Fedora + Debian/Ubuntu)

_open_browser tente les binaires natifs (rpm + deb : brave-browser / chromium /
chromium-browser / google-chrome…) puis Flatpak (com.brave.Browser,
org.chromium.Chromium, com.google.Chrome…), sinon repli sur le navigateur par
défaut. systemd --user, lanceurs .desktop et pipx sont déjà identiques sur les
deux familles.

Doc : note de compatibilité distros. Bump 0.4.0 → 0.4.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Qjq5jHiqNepnobJpHYpCa
This commit is contained in:
Claude 2026-06-18 20:46:57 +00:00
parent c0da379755
commit c5de427a85
No known key found for this signature in database
3 changed files with 35 additions and 7 deletions

View file

@ -210,6 +210,13 @@ stt --version # version installée
avoir installé via `pipx` depuis git. Astuce : toujours bumper la version du paquet à chaque
release, sinon le cache de build pipx/uv peut resservir l'ancienne (cf. `pyproject.toml`).
**Compatibilité distros** : tout le client repose sur des standards communs — `systemd --user`,
lanceurs `.desktop` (XDG `~/.local/share/applications/`), `pipx` — donc **identique sur
AlmaLinux/Fedora (RHEL) et Debian/Ubuntu**. Seul le navigateur diffère : `_open_browser` teste
les binaires natifs (rpm + deb) puis **Flatpak** (`com.brave.Browser`, `org.chromium.Chromium`…),
sinon repli sur le navigateur par défaut. `update-desktop-database` (`desktop-file-utils`) est
optionnel — son absence n'empêche rien.
---
## Roadmap

View file

@ -1,6 +1,6 @@
[project]
name = "stt"
version = "0.4.0"
version = "0.4.1"
description = "STT — client vocal Jarvis du homelab Funk (voix + HUD, parle au STT-server)"
requires-python = ">=3.11"
readme = "README.md"

View file

@ -114,21 +114,42 @@ def _run_engine(engine, emit) -> None:
def _open_browser(url: str, mode: str) -> None:
"""Ouvre le HUD. mode : 'app' (fenêtre chromeless, type Discord) | 'kiosk' (plein écran)."""
"""Ouvre le HUD. mode : 'app' (fenêtre chromeless, type Discord) | 'kiosk' (plein écran).
Cross-distro AlmaLinux/Fedora (RHEL) et Debian/Ubuntu : on tente les binaires natifs
(noms rpm + deb), puis Flatpak (courant sur Fedora/AlmaLinux), sinon repli sur le
navigateur par défaut. Chromium-like : `--app=<url>` = fenêtre sans onglets, `--kiosk` = plein écran.
"""
import shutil
import subprocess
import webbrowser
# Chromium-like : --app=<url> = fenêtre dédiée sans onglets ; --kiosk = plein écran.
flags = ["--kiosk", url] if mode == "kiosk" else [f"--app={url}"]
# 1) Binaire natif (rpm/deb)
for browser in (
"brave-browser", "brave", "chromium", "chromium-browser",
"brave-browser", "brave",
"chromium", "chromium-browser",
"google-chrome", "google-chrome-stable",
"microsoft-edge", "vivaldi",
):
if shutil.which(browser):
args = [browser, "--kiosk", url] if mode == "kiosk" else [browser, f"--app={url}"]
subprocess.Popen(args)
subprocess.Popen([browser, *flags])
return
webbrowser.open(url) # repli : onglet dans le navigateur par défaut
# 2) Flatpak (universel — souvent la voie sur Fedora/AlmaLinux)
if shutil.which("flatpak"):
for appid in ("com.brave.Browser", "org.chromium.Chromium",
"com.google.Chrome", "com.microsoft.Edge"):
installed = subprocess.run(
["flatpak", "info", appid], capture_output=True
).returncode == 0
if installed:
subprocess.Popen(["flatpak", "run", appid, *flags])
return
# 3) Repli : onglet dans le navigateur par défaut
webbrowser.open(url)
def _apply_settings(client, engine, data: dict, loop) -> None: