1
Terminal-WSL
Augustin ROUX edited this page 2026-04-27 08:46:44 +00:00

Terminal & WSL

Onglet Terminal

L'onglet Terminal de Muyue propose des terminaux PTY natifs (xterm.js + creack/pty) avec :

  • shells locaux (bash, zsh, fish, pwsh, powershell, cmd…)
  • distributions WSL individuelles (Windows uniquement, depuis v0.6.0)
  • connexions SSH sauvegardées (clé ou mot de passe via sshpass -e)

Quick-launch WSL (Windows)

Sur un hôte Windows, le menu "+" du terminal liste désormais chaque distribution WSL installée comme une entrée distincte :

WSL (default)        # wsl (la distro par défaut)
WSL: Ubuntu          # wsl -d Ubuntu
WSL: Debian          # wsl -d Debian
WSL: kali-linux      # wsl -d kali-linux
…

Détection

Backend : internal/api/terminal.go::listWSLDistros() exécute wsl --list --quiet et parse la sortie UTF-16LE de Windows en gardant uniquement les noms valides (regex ^[a-zA-Z0-9._-]+$). Aucun appel WSL si l'hôte n'est pas Windows.

Lancement

Quand l'utilisateur clique sur une entrée WSL, le frontend envoie data: "wsl -d Ubuntu" au WebSocket. Le backend reconnaît ce format via parseWSLShell() et lance wsl -d Ubuntu directement.

Sécurité

  • Les noms de distros et users sont validés avant d'être passés en argv
  • wsl est résolu via exec.LookPath ; pas de shell intermédiaire ; pas de chaîne shell concaténée

Connexions SSH

POST /api/terminal/sessions enregistre une connexion SSH dans la config. Mots de passe :

  • chiffrés au repos par internal/secret
  • masqués "***" dans GET /api/terminal/sessions
  • si l'utilisateur renvoie "***" lors d'un update, le mot de passe stocké est conservé (pas écrasé)
  • au runtime, transmis à sshpass -e via la variable d'env SSHPASS (jamais en argv visible dans ps)