55 Punkte von GN⁺ 2025-09-11 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Ein CLI-Programm für Linux, mit dem sich GUI-Anwendungen direkt im Terminal ausführen lassen
  • Verwendet einen selbst entwickelten Wayland-Compositor, der die GUI-Ausgabe statt an einen Monitor an das Terminal weiterleitet
  • Funktioniert auch in SSH-Umgebungen; Webbrowser, Dateimanager und sogar das Spiel Doom lassen sich im Terminal ausführen
  • Die Ausgabequalität hängt von der Terminalauflösung (Anzahl der Zeilen und Spalten) ab; in bildunterstützenden Terminals wie iTerm2 und kitty wird auch Rendering in voller Auflösung unterstützt
  • Entwickelt auf Basis von Typescript und bun, mit etwas C++-Code; derzeit werden nur einige Apps unterstützt, aber das Projekt wird mit dem Ziel „Term everything❗“ weiter ausgebaut

Bedeutung des Projekts und Vergleichsvorteile

  • Im Unterschied zu bestehenden Terminal-Dateibetrachtern oder einfachen Bildausgabetools kann Term.everything „alle“ GUI-Anwendungen im Terminal ausführen
  • Da sich die GUI auch in Netzwerkumgebungen einschließlich SSH nutzen lässt, ist es besonders stark bei Serververwaltung und Remote-Entwicklung
  • Nutzt die Bildfunktionen moderner Terminals wie kitty und iTerm2 maximal aus und bietet Optionen zur Verbesserung von Auflösung und Framerate

Überblick

  • Term.everything ist ein Linux-CLI-Programm, dessen Besonderheit darin besteht, GUI-Fenster direkt im Terminal auszuführen
  • Das Herzstück ist ein selbst entwickelter Wayland-basierter Compositor, der die GUI nicht auf einem normalen Monitor, sondern im Terminal rendert
  • Unterstützt sowohl x11- als auch Wayland-basierte Anwendungen und kann auch remote über SSH verwendet werden
  • Die begrenzte Zahl an Terminalzeilen und -spalten beeinflusst die Fensterqualität; mit höherer Terminalauflösung lässt sich die Qualität verbessern, allerdings möglicherweise auf Kosten der Performance

Wichtige Einsatzbeispiele

  • Spiele ausführen: Im Terminal lassen sich Spiele wie Fontemon oder Doom (Shareware-Episode) starten
  • Video abspielen: Der Film Wing It! kann wiedergegeben werden; über die Auflösung lässt sich ein Gleichgewicht zwischen Framerate und Bildqualität einstellen
  • Browser starten: In einer iTerm2- + SSH-Umgebung kann man sich mit Ubuntu verbinden und Firefox starten
  • Alternative zu Dateibetrachtern: Statt eigens einen terminalspezifischen Dateibetrachter zu bauen, kann man bestehende GUI-Dateimanager direkt im Terminal verwenden
  • Rekursive Ausführung: Ein weiteres Terminal innerhalb des Terminals ausführen, also ein "terminal in a terminal"

Funktionsweise und Entwicklungsinformationen

  • Grundkonzept

    • Früher konnten Programme, wenn sie etwas auf dem Bildschirm darstellen wollten, direkt in einen bestimmten Bereich des RAM schreiben
    • In modernen Systemen verwaltet ein Display Server die Ein- und Ausgabe und koordiniert Eingaben wie Maus und Tastatur sowie Grafik- und Bildausgabe
    • Unter Linux werden hauptsächlich das Wayland-Protokoll oder X11 verwendet; Term.everything basiert auf Wayland
  • Das Wayland-Protokoll

    • Wayland ist nicht der Display Server selbst, sondern ein Protokoll, das die Kommunikation zwischen Server und Programmen definiert
    • Programme übergeben ihre selbst gerenderten Ergebnisse an den Display Server, der sie auf dem Bildschirm ausgibt
    • Wichtig ist, dass kein bestimmtes Rendering-Modell erzwungen wird → Programme können auf die von ihnen gewünschte Weise zeichnen
    • Dadurch kann das Ausgabeergebnis statt auf den Bildschirm auch an einen anderen Ort gesendet werden, z. B. an ein Terminal
  • Ausgabeverarbeitung in Term.everything

    • Nimmt die von Wayland-Clients (den gestarteten GUI-Apps) gezeichneten Bilder entgegen und wandelt sie in Terminal-Zeichenausgabe um
    • Umwandlungsprozess:
      • 1. Empfang der vom Client übermittelten Bilddaten
      • 2. Umwandlung in UTF-8-Zeichen + ANSI-Escape-Codes
      • 3. Für die Umwandlung wird die chafa-Bibliothek verwendet, die Pixel auf Terminalzeichen abbildet
    • Eingaben werden über stdin übergebene Tastatur- und Mausereignisse an die Wayland-Clients weitergereicht
  • Tatsächliche Implementierung

    • Die Kernidee ist einfach, aber für die tatsächliche Implementierung sind etwa zehntausend Zeilen Code nötig
    • Geschrieben in Typescript (auf bun-Basis) und teilweise in C++; es übernimmt die Rolle eines benutzerdefinierten Wayland-Display-Servers
    • Der Quellcode ist im Verzeichnis src/ einsehbar
  • Erweiterbarkeit

    • Term.everything will mehr sein, als nur GUI im Terminal auszuführen
    • Mit einem benutzerdefinierten, Wayland-basierten Display Server lassen sich möglicherweise auch andere experimentelle Ideen umsetzen
    • Zum Beispiel könnte das Ausgabegerät statt eines Terminals an ein völlig anderes Medium angebunden werden, etwa einen Drucker oder physische Kunstwerke

Noch keine Kommentare.

Noch keine Kommentare.