Ein 5250-Terminal unter Linux

Die Situation ist folgende: In der Firma gibt es eine IBM AS/400 (mittlerweile eServer iSeries, http://www.iseries.ibm.com/). Früher hatte man TWINAX-Terminals1. Doch die sind nicht mehr erhältlich, oder im entsprechenden Gebäudeteil fehlt die Verkabelung. Oder: Man benutzt eigentlich Workstations mit Client Access, braucht aber im Falle eines Falles eine Art Notbetrieb.

So entstand die Idee, eine Mini-Linux-Distribution mit eingebautem 5250-Terminal zusammen zu stellen. Das Ganze braucht wenig Ressourcen und gibt sich mit ganzen 6 MB Speicherplatz auf der Festplatte zufrieden!

Screenshot gefällig? (Der ist nicht original, sondern in einem xterm gemacht.)

tn5250.png

Verwendete Software

Wie es funktioniert

In den 6 MB enthalten ist der Boot-Manager GRUB, mit dem (bei Dual-Boot-Betrieb) zwischen dem Standard-Betriebssystem und dem Terminal-Betrieb gewählt wird. Für das Booten ist ein BSD-artiges Bootkonzept gewählt worden. Die Datei /etc/rc ist das Haupt- Startskript; alle Optionen können in der Datei /etc/rc.conf gesetzt werden. In der Standardeinstellung fragt /etc/rc nach IP- Adresse und Gateway (nein, einen DHCP-Server gibt es in unserer Firma nicht :) ) sowie nach der IP-Adresse des Servers. Die Fragerei geschieht mit dialog einigermaßen komfortabel. Die Parameter können, wie gesagt, auch ¡n der /etc/rc.conf voreingestellt werden.

Ist das erledigt, startet auf Konsole 1 sofort eine 5250-Sitzung. Auf den weiteren Konsolen kann mit ENTER jeweils noch eine Sitzung gestartet werden. Zum Beenden der Arbeit kann mit Strg+Alt+Entf der Computer heruntergefahren werden.

Probleme

Wer schon einmal eine 5250-Tastatur gesehen hat, weiß, dass sie 24 Funktionstasten (in zwei Reihen) besitzt. Die Linux-Konsole emuliert in groben Zügen ein DEC-VT100 Terminal, entsprechend mit nur 20 Funktionstasten. Bei tn5250 wird eine (US-)Keymap sowie eine entsprechende Terminal-Definition mitgeliefert. Die Keymap habe ich auf eine deutsche Tastatur angepasst. Jedoch wurden die erweiterten Einträge für F21 bis F24 von den Busybox- Programmen nicht berücksichtigt. Deshalb habe ich das "richtige" loadkeys dazu gepackt.

Außerdem musste ich um tn5250 einen Shell-Wrapper /bin/tn5250.sh stricken, der die richtigen Umgebungsvariablen (vor allem TERM=5250) setzt. Der Nebeneffekt ist, dass immer dann, wenn in /etc/rc.conf keine Server-IP gesetzt ist, vor jeder neuen Sitzung danach gefragt wird. Damit kann man mit mehreren Servern gleichzeitig arbeiten.

Irgendwie gab es bei tn5250 ein Problem mit der Funktion getpwuid() -- das kann daran liegen, dass ich überhaupt keine richtige Benutzerverwaltung habe ;) . Also musste ich tn5250 dahin gehend patchen, dass es kein getpwuid() mehr braucht. Dadurch ging die Funktionalität des Einlesens von $HOME/.tn5250rc verloren, aber die brauche ich sowieso nicht.

uClibc habe ich vor allem deshalb verwendet, weil ich so einen Horror vor dem Kompilieren der glibc hatte. Und wenn man alle Programme statisch gegen die glibc linkt (das war die erste Lösung), macht NSS (Name Service Switch) Probleme -- also alle Funktionen, die Usernamen- oder Hostnamen-Lookups machen (etwa das schon erwähnte getpwuid().

5250-Terminals benötigen zwingend das Unterstreichen von Text (damit werden die Eingabefelder markiert). Im normalen VGA- Textmodus sind Unterstreichungen leider nicht möglich; man muss sich entscheiden, ob man Farbe oder Textattribute möchte. Ein Workaround ist hier die tn5250-Option +underscores, die unterstrichene Leerzeichen, also den freien Platz in Eingabefeldern als Tiefstriche (_) darstellt.

Download

Hier: terminal.tar.bz2 ;)

Ich hoffe, das ist von der Dateigröße her noch im Rahmen: 2,8 MB. -- 213.182.141.210 2002-06-13 15:54:35

Weitere Pläne

Im Augenblick muss die Installation noch manuell aus dem Tarball heraus erfolgen; für die Zukunft ist die Erstellung eines ISO- Images mit Installationsprogramm geplant. Wenn mit langweilig ist, portiere ich das Ganze vielleicht noch auf dem OpenBSD- Kernel. Das wäre vom Hardware-Support her ideal: Im GENERIC- Kernel sind alle Treiber schon drin. Im Augenblick habe ich einen Kernel, der auf die bei uns verwendete Hardware angepasst ist.

  1. Für die nicht Eingeweihten: Twinax ist ein IBM-eigenes Bussystem mit zwei Koax-Kabeln; mit einem Adapter kann man es über Twisted Pair / RJ45-Stecker führen. (1)

BennySiegert/5250Terminal (zuletzt geändert am 2007-12-23 22:47:25 durch localhost)