2 Punkte von GN⁺ 2024-04-22 | 1 Kommentare | Auf WhatsApp teilen

DOOM mit htop umsetzen

Build-Anleitung

  • In das Verzeichnis doomgeneric wechseln
  • Mit dem Befehl make -j8 bauen
  • Eine WAD-Datei (Spieldaten) wird benötigt. Dieses Projekt enthält freedoom1.wad (alle Credits an das Freedoom-Projekt). Alternativ kann auch die klassische kostenlose Shareware-Version DOOM1.wad heruntergeladen und verwendet werden

Ausführung

  • Es wird empfohlen, wichtige Arbeit vorher zu speichern
  • Bestätigt, dass es auch auf alten Laptops gut läuft
  • Folgende Befehle ausführen:
    sed -i 's/update_process_names=0/update_process_names=1/' ~/.config/htop/htoprc
    sudo ./doom-htop -iwad freedoom1.wad
    htop -d 1 -s M_VIRT
    
  • Die Startreihenfolge von doom-htop und htop ist egal
  • sudo ist erforderlich, um das Tastaturgerät zu öffnen. Falls es Sicherheitsbedenken gibt, kann es auch ohne sudo ausgeführt werden, um nur die Grafik anzusehen
  • htop -d 1 ist für eine Aktualisierungsrate von 10 FPS gedacht. -s M_VIRT sortiert die Prozesse nach zugewiesenem virtuellem Speicher
  • Der sed-Befehl ist nötig, weil htop Prozessnamen standardmäßig nicht bei jeder Aktualisierung neu einliest

Funktionsweise

  • Entstanden als Fork des Projekts https://github.com/ozkl/doomgeneric
  • Dateien main.c, keylogger.c, ascii_stuff.c hinzugefügt und teilweise Änderungen vorgenommen
  • Einen einfachen Bild-zu-ASCII-Konverter geschrieben (die lange if-Anweisung in ascii_stuff.c)
  • Der Hauptprozess von Doom erzeugt so viele Kindprozesse, wie das ASCII-Bild Zeilen hat, und erstellt mit jedem Prozess ein Shared-Memory-Segment
  • Der Hauptprozess kopiert jede Zeile in das jeweilige Speichersegment des entsprechenden Prozesses, und jeder Kindprozess liest aus seinem Segment und überschreibt argv[0]
  • Ursprünglich sollte nach CPU-Auslastung sortiert werden, was sich aber als schwierig erwies. Auch Linux-nice wurde erwogen, aber verworfen, weil Nutzer nur 19 Werte einstellen können
  • Dann kam die Idee, die Zuweisung von virtuellem Speicher zu verwenden. Diese ist pro Prozess spezifisch
  • Selbst wenn alle Kindprozesse exakt gleich viel Speicher allokieren, werden die Frames in htop in der richtigen Reihenfolge angezeigt. Vermutlich wird bei Gleichstand nach Erstellungszeit sortiert
  • Ein einfacher Keylogger wurde geschrieben, um das Tastaturgerät zu öffnen. Das Spiel läuft immer im Hintergrund, unabhängig davon, ob htop ausgeführt wird oder nicht

Unterstützte Plattformen

  • Nur unter Ubuntu 22.04 getestet
  • Unter WSL und Arch haben Tastaturgeräte andere Namen. Ein Port ist erforderlich

Fehlerbehebung

  1. Falls die Tastatur nicht funktioniert
    • Das Makro KEYBOARD_DEVICE in main.c prüfen. Es kann je nach Plattform unterschiedlich sein
    • Mit dem Befehl ll /dev/input/by-path ein Gerät auswählen, das kbd enthält
  2. Falls das Bild einfriert
    • Der sed-Befehl hat möglicherweise nicht funktioniert
    • In htop F2 -> "Display options" -> "Update process names on every refresh" aktivieren
  3. Fehler sed: can't read /home/<user>/.config/htop/htoprc: No such file or directory
    • Tritt auf, wenn htop noch nie ausgeführt wurde. htop einmal starten, beenden und dann sed erneut ausführen
  4. Falls der Haupt-Doom-Prozess abstürzt und nur Zombie-Prozesse übrig bleiben
    • sudo pkill doom-htop ausführen

Verbesserungen

  • Beim Bewegen mit den Pfeiltasten verschiebt sich der htop-Bildschirm, was unpraktisch ist
  • Das lässt sich lösen, indem nach dem Start von htop der Fokus geändert wird (z. B. durch Drücken der Taste a, um das Auswahlmenü für Prozessoren zu öffnen)

FAQ

  1. F: Warum wurde das gemacht? A: Weil es lustig klang.

Lizenz

  • Freedoom steht unter einer BSD-ähnlichen Lizenz (siehe freedoom-license.txt)
  • Der restliche Code steht vermutlich unter GPL

Meinung von GN⁺

  • Einen 3D-Spielbildschirm mit ASCII-Art darzustellen, ist eine frische Idee. Es scheint ein gutes Beispiel dafür zu sein, wie man in C ähnlich wie bei htop Grafik auf dem Bildschirm zeichnet
  • Beeindruckend ist, dass nicht nur der Bildschirm in ASCII-Art umgewandelt wurde, sondern dass dies tatsächlich mit der echten Game-Engine gekoppelt umgesetzt wurde
  • Positiv hervorzuheben ist auch, dass das bestehende Projekt doomgeneric gut genutzt wurde, um dies mit relativ wenig Code umzusetzen
  • Das direkte Öffnen eines Linux-Geräts für Tastatureingaben funktioniert unter WSL oder anderen Betriebssystemen möglicherweise nicht. Eine plattformunabhängige Bibliothek für Tastatureingaben wäre prüfenswert
  • Die Idee, Shared Memory zu nutzen, um ASCII-Frame-Daten zwischen Eltern- und Kindprozessen auszutauschen, ist interessant. Ein gutes Beispiel, um sich mit IPC zu beschäftigen
  • Auch die Idee, ASCII-Grafik in die Prozessnamen von htop einzubauen, ist kreativ. Allerdings hat das Nebenwirkungen, etwa dass sich der Bildschirm durch Namensänderungen verschiebt. Hier scheint noch Verbesserung nötig
  • Die Lizenz wird vermutlich GPL sein, ist aber nicht eindeutig. Vor Wiederverwendung des Codes sollte die Lizenz geprüft werden

1 Kommentare

 
GN⁺ 2024-04-22
Hacker-News-Kommentare

Diese Kommentare enthalten Reaktionen auf ein Projekt, das das als ASCII gerenderte Spiel Doom als Prozesse mithilfe von htop ausführt. Die wichtigsten Punkte sind folgende:

  • Vergleich mit PSDoom: Während PSDoom Doom zur Prozessverwaltung nutzt, läuft es bei diesem Projekt umgekehrt: Man spielt Doom mit einem Prozessmanager.
  • Technische Einschätzung: Das Rendern in ASCII und das Einfügen in Prozessnamen ist an sich nicht schwierig, aber die Idee, htop als Rendering-Engine zu verwenden, ist beeindruckend und zeigt die Essenz von Software-Hacking.
  • Respekt vor den Fähigkeiten des Entwicklers: Wenn man Entwickler sieht, die die Zeit und die Fähigkeiten haben, solche Projekte zu bauen, verliert man das Vertrauen in die eigenen Fähigkeiten.
  • Trend zur Doom-Integration: Inzwischen könnte man sogar darüber nachdenken, alltägliche Dinge in Doom zu integrieren. Man kann sich To-do-Listen oder Kalender vorstellen.
  • Lob des Hackergeists: Es ist erfreulich zu sehen, dass Hacking-Projekte zum Spaß populär werden, und das zeigt, dass der Hackergeist noch lebt.
  • Erinnert an Bad Apple: Es ruft das Bad-Apple-Video in Erinnerung, das im Windows-Task-Manager umgesetzt wurde.
  • Die Zukunft von Doom: Es ist schwer vorstellbar, wie weit Doom in Zukunft noch umgesetzt werden kann.