Terminal VT510

Aktives Projekt

Projektstatus: 
Work in progress

Ziel des Projektes

Ergebnisoffenes Experimentieren mit alter Hardware, in diesem Fall einem original "Digital VT510" Videoterminal. Das Projekt dient primär dem Erkenntnisgewinn!

Aktueller Stand

Das Terminal läuft stabil per USB-Seriell-Adapter. Nach längeren Versuchen stellte sich heraus dass sie maximal mögliche Geschwindigkeit ohne Übertragungsfehler mit 38400 erreicht ist. Wenn Terminal und Host darauf eingestellt sind läuft es (meistens) fehlerfrei und ausreichend schnell.

Gerade bin ich dabei ein wenig mit der seriellen Kommunikation zwischen Host und Terminal zu spielen. Dazu entwickle ich gerade ein kleines Programm das die Eingaben am Terminal anzeigen und Daten zur Ausgabe übermitteln kann. Die Entwicklung findet auf GitHub statt: https://github.com/Wene/TermTest

Dokumentation

Dokumentation zum Terminal selbst gibt es online unter http://www.vt100.net/docs/vt510-rm/contents

Die Beschreibung nach der ich erstmals erfolgreich eine Shell auf das Terminal gebracht habe stammt grossteils von hier: http://0pointer.de/blog/projects/serial-console.html

Gemäss dieser Anleitung habe ich die folgende Datei erstellt:

# Pfad und Name: /etc/systemd/system/serial-getty@ttyUSB0.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Serial Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
BindsTo=dev-%i.device
Conflicts=rescue.service
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service

# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes

[Service]
ExecStart=-/sbin/agetty -L 38400 %I vt100
ExecStopPost=-/sbin/vhangup /dev/%I
Type=idle
Restart=always
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes

Geändert gegenüber dem Original habe ich dabei nur die erste Zeile unter [Service]:

ExecStart=-/sbin/agetty -L 38400 %I vt100

Dabei gebe ich die Baudrate sowie den Terminaltyp explizit an. Ich werde demnächst noch andere Terminaltypen ausprobieren, es handelt sich schliesslich bei meiner Hardware um ein VT510.

Mit dieser Konfiguration kann man den USB-Seriell-Adapter zur Laufzeit des Hostsystems anschliessen. mit dmesg -c resp. journalctl -n 30 lässt sich der Name der neuen seriellen Schnittstelle ermitteln. In diesem Fall gehe ich davon aus dass es immer /dev/ttyUSB0 ist. Sollte die Schnittstelle einmal anders heissen, müsste dies im Dateinamen des Services hinter dem @ angepasst werden.

Gestartet wird die Schnittstelle schliesslich als root mit:

# systemctl start serial-getty@ttyUSB0.service

Nun erscheint am Terminal, sofern es eingeschaltet und mit der seriellen Schnittstellt verbunden ist, der gewohnte Login- Prompt des Host Systems. Man kann sich nun mit den Benutzerkonten des Hosts anmelden und z.B. per telnet towel.blinkenlights.nl 23 Star Wars in ASCII- Art geniessen. wink (Es empfielt sich, dazu die Darstellung des Cursors und der Statuszeile zu deaktivieren.)