55 points par GN⁺ 2025-09-11 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Programme CLI pour Linux qui permet d’exécuter directement des applications GUI dans le terminal
  • Utilise un compositeur Wayland maison pour envoyer la sortie GUI vers le terminal au lieu d’un moniteur
  • Fonctionne aussi via ssh, et permet d’exécuter dans le terminal un navigateur web, un gestionnaire de fichiers, et même le jeu Doom
  • La qualité d’affichage varie selon la résolution du terminal (nombre de lignes et de colonnes), et les terminaux prenant en charge les images comme iTerm2 ou kitty permettent aussi un rendu en pleine résolution
  • Développé en Typescript sur bun avec une partie du code en C++, le projet ne prend encore en charge qu’une partie des applications mais s’étend avec l’objectif « Term everything❗ »

Importance du projet et avantages comparatifs

  • Contrairement aux visionneuses de fichiers en terminal existantes ou aux simples outils d’affichage d’images, Term.everything permet d’exécuter « toutes » les applications GUI dans le terminal
  • Il permet d’utiliser une interface GUI même dans des environnements réseau, y compris en SSH, ce qui constitue un atout pour l’administration serveur et le développement à distance
  • Exploite au maximum les capacités d’image des terminaux modernes comme kitty et iterm2, avec des options pour améliorer la résolution et le framerate

Vue d’ensemble

  • Term.everything est un programme en CLI Linux, dont la particularité est de permettre l’exécution directe de fenêtres GUI dans le terminal
  • Son cœur est un compositeur basé sur Wayland développé sur mesure, qui effectue le rendu de l’interface GUI vers le terminal au lieu d’un écran classique
  • Il prend en charge à la fois x11 et Wayland, et peut aussi être utilisé à distance via ssh
  • Le nombre limité de lignes et de colonnes du terminal influe sur la qualité de la fenêtre, et augmenter la résolution du terminal permet d’améliorer le rendu (au prix possible d’une baisse de performances)

Principaux cas d’usage

  • Exécution de jeux : permet de lancer dans le terminal des jeux comme Fontemon ou Doom (épisode shareware)
  • Lecture vidéo : lecture du film Wing It!, avec possibilité d’ajuster la résolution pour équilibrer framerate et qualité d’image
  • Lancement de navigateur : dans un environnement iTerm2 + ssh, il est possible de se connecter à Ubuntu et d’y lancer Firefox
  • Alternative aux visionneuses de fichiers : au lieu de créer un gestionnaire de fichiers spécifique au terminal, on peut utiliser directement un gestionnaire de fichiers GUI existant dans le terminal
  • Exécution récursive : lancer un autre terminal à l’intérieur du terminal, un « terminal in a terminal »

Fonctionnement et informations de développement

  • Concept de base

    • Par le passé, lorsqu’un programme devait afficher quelque chose à l’écran, il pouvait écrire directement dans une zone spécifique de la RAM
    • Sur les systèmes modernes, c’est le serveur d’affichage (Display Server) qui gère les entrées/sorties et coordonne les entrées comme la souris et le clavier avec la sortie graphique et les images
    • Sous Linux, on utilise principalement le protocole Wayland ou X11, et Term.everything fonctionne sur la base de Wayland
  • Protocole Wayland

    • Wayland n’est pas le serveur d’affichage lui-même, mais un protocole qui définit la communication entre le serveur et les programmes
    • Les programmes transmettent au serveur d’affichage le résultat de leur rendu, et le serveur l’affiche à l’écran
    • Point important : aucun modèle de rendu n’est imposé → les programmes peuvent dessiner de la manière qu’ils souhaitent
    • Il est ainsi possible d’envoyer le résultat de sortie ailleurs que vers un écran (par exemple vers un terminal)
  • Traitement de la sortie dans Term.everything

    • Reçoit les images dessinées par les clients Wayland (applications GUI exécutées) et les convertit en sortie texte pour terminal
    • Processus de conversion :
      • 1. réception des données d’image envoyées par le client
      • 2. conversion en caractères UTF-8 + codes d’échappement ANSI
      • 3. utilisation de la bibliothèque chafa pour mapper les pixels vers des caractères de terminal
    • Les entrées sont transmises aux clients Wayland sous forme d’événements clavier et souris reçus via stdin
  • Implémentation réelle

    • L’idée de base est simple, mais l’implémentation réelle nécessite environ dix mille lignes de code
    • Écrit en Typescript (sur bun) avec une partie en C++, il joue le rôle d’un serveur d’affichage Wayland personnalisé
    • Le code source peut être consulté dans le répertoire src/
  • Potentiel d’extension

    • Term.everything ne vise pas seulement à exécuter des GUI dans le terminal
    • En s’appuyant sur un serveur d’affichage personnalisé basé sur Wayland, il pourrait aussi permettre de mettre en œuvre d’autres idées expérimentales
    • Exemple : connecter le périphérique de sortie non pas au terminal, mais à un support totalement différent (par exemple une imprimante, une œuvre d’art physique, etc.)

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.