Vom Alt-PC zum X-Terminal

Viele PC sind für aktuelle Anwendungen einfach nicht mehr so recht geeignet, obwohl sie noch ordentlich funktionieren. Der Prozessor ist zu langsam, der Hauptspeicher ist nicht ausbaufähig, die Platte ist viel zu klein. Aber eigentlich ist es viel zu schade, das Gerät wegzuwerfen. Auch aus dem Blickwinkel des Umweltschutzes ist die Vermeidung von Elektronikschrott wünschenswert. Und oft, gerade auch an Schulen, fehlen finanzielle Mittel, das Alteisen durch neue Rechner zu ersetzen. Linux ist ein probates Mittel, die Geräte als X-Terminals weiter zu benutzen.

Hier soll im folgenden gezeigt werden, wie dabei vorgegangen werden kann. Dabei sollen die nötigen Schritte genau genug und nachvollziehbar dargestellt werden. Viele Abwandlungen und Verbesserungen sind denkbar und beim konkreten Einsatz auch nötig.

Inhalt

  1. Grundlagen: X als netzwerkfähiges Grafiksystem
  2. Voraussetzungen, Vor- und Nachteile
  3. Kernel für das X_Terminal übersetzen
  4. netboot, Packet-Treiber, Boot-PROM
  5. bootp
  6. tftp
  7. NFS
  8. minimales Root-Filesystem für das X-Terminal
  9. xdm
  10. xfs

Grundlagen: X als netzwerkfähiges Grafiksystem

Einige Begriffe:
X-Server
Ein Programm, das die grafische Anzeige von Informationen und die Entgegennahme von Tastatur- und Mauseingaben leistet. Es stellt diese Dienste lokal und im Netz zur Verfügung.
X-Client
Eine Anwendung, die irgendeine Arbeit verrichtet und dazu dem Benutzer Informationen anzeigt oder Eingaben von diesem benötigt. Es bedient sich dazu der Dienste eines X-Servers und kommuniziert mit diesem über das X-Protokoll.
X-Protokoll
X-Client und X-Server müssen eine gemeinsame Sprache sprechen, um miteinander kommunizieren zu können. Diese gemeinsame Sprache ist das X-Protokoll. Das X-Protokoll kann seinerseits wieder auf verschiedenen Verbindungsprotokollen aufsetzen. Lokal (X-Client und X-Server laufen auf dem gleichen Rechner) geschieht das über UNIX Domain Sockets, im Netz über normale TCP sockets.
libX11 und Co.
Damit das X-Protokoll nicht von jedem X-Client wieder neu implementiert werden muss, ist dieses in Bibliotheken implementiert. Die Anwendungen werden meist dynamisch gegen diese Bibliotheken gelinkt.
X-Terminal
bezeichnet ein Gerät, ausgerüstet mit Bildschirm, Tastatur und Maus, auf dem ein X-Server läuft. Direkt als X-Terminals gefertigte Geräte zeichnen sich meist durch kleine Gehäuse ohne Lüfter und Festplatten aus. Manche davon stellen auch weitere Funktionen zur Verfügung, etwa Sound oder lokale Windowmanager. Die in letzter Zeit in Mode gekommenen Thin Clients verfügen darüber hinaus über lokale Verarbeitungsleistung, meist in Form eines Java-Interpreters und sprechen zusätzliche Protokolle (ICA, RDP).
Windowmanager
Ein Windowmanager ist ein X-Client mit der speziellen Eigenschaft, das äußere Erscheinungsbild des Desktops zu bestimmen und die Fenster der anderen X-Clients zu managen.
Wichtig ist, hier zu verstehen, daß der X-Server auf dem Client-Rechner und die X-Clients auf dem fetten Server laufen.

Voraussetzungen, Vor- und Nachteile

Server Client Vorteile Nachteile

Kernel für das X-Terminal übersetzen

Wichtig: NFS-Filesystem und Ethernetkarte müssen fest in den Kernel rein, nicht als Modul übersetzen. Übersetzen mit make zImage. Den Kernel zunächst in arch/i386/boot liegenlassen.

netboot, Packet-Treiber, Boot-PROM

bootp

tftp

NFS

  • Portmapper und NFS-Server müssen gestartet sein.
  • Damit Hostnamen zu IP-Adressen aufgelöst werden können, sollten sowohl Server als auch Clients in /etc/hosts eingetragen sein oder ein Nameserver verwendet werden.
  • vi /etc/exports:
          /var/tftpboot/jojo      jojo(rw,no_root_squash)
          
  • no_root_squash ist wichtig, sonst werden Berechtigungen auf nobody gemappt. Der Hostname muß explizit eingetragen sein, sonst wird no_root_squash ignoriert.

    minimales Root-Filesystem für das X-Terminal

    Konzept:
      mkdir /var/tftpboot/jojo
      cd /var/tftpboot/jojo
    
      mkdir etc
      mkdir dev
      mkdir bin
      mkdir lib
      mkdir sbin
      
    Welche binaries werden gebraucht?
      cp /usr/X11R6/bin/XF86_S3 bin
      cp /bin/loadkeys bin
      cp /sbin/init sbin
      
    Devices?
      for d in console tty tty0 tty1 tty2 ttyS0 ttyS1 psaux mem null
        do
        cp -a /dev/$d dev
      done
      
    shared libs? -- mit
    ldd
    herausfinden
      cp /usr/lib/libz.so.1 lib
      cp /lib/libm.so.6 lib
      cp /lib/libdl.so.2 lib
      cp /lib/libc.so.6 lib
      cp /lib/ld-linux.so.2 lib
      cp /lib/libcrypt.so.1 lib
      
    Einstellungen in etc?
    vi etc/inittab
        # default runlevel: S
        id:S:initdefault:
        # load a keyboard map
        kb:S:once:/bin/loadkeys /etc/default.map
        # directly start X and broadcast for an xdm server
        sj:S:once:/bin/XF86_S3 -nolock -broadcast
        
    Vollständige Tastaturtabelle übernehmen (unter der Voraussetzung, daß auf Server und Client dasselbe Mapping verwendet wird.)
          dumpkeys > etc/default.map
        
    Einstellungen X11?
      cp /usr/X11R6/lib/X11/rgb.txt etc
      mkdir etc/X11
      
    (bei Debian liegt XF86config dort, bei SuSE-Servern oder direkt von www.xfree86.org besorgten Servern liegt XF86Config direkt in /etc.)
      vi /etc/X11/XF86config
      
        Section "Files"
           RgbPath     "/etc/rgb"
           FontPath    "tcp/truckle:7100"
           FontPath    "tcp/truckle:7101"
        EndSection
        #
        Section "Keyboard"
          Protocol    "Standard"
          AutoRepeat  300 30
          LeftAlt     Meta
          RightAlt    ModeShift
          ScrollLock  Compose
          XkbDisable
        EndSection
        #
        Section "Pointer"
          Protocol    "Microsoft"
          Device      "/dev/ttyS0"
          Emulate3Buttons
          Emulate3Timeout    50
        EndSection
        #
        Section "Monitor"
          Identifier  "moni"
          VendorName  "Unknown"
          ModelName   "Unknown"
          HorizSync   31.5 - 64.3
          VertRefresh 50-100
          #
          # 800x600 @ 85 Hz, 55.84 kHz hsync
          Modeline  "800x600"    60.75  800  864  928 1088   600  616  621 657 -HSync -VSync
          # 1024x768 @ 70 Hz, 56.5 kHz hsync
          Modeline "1024x768"    75    1024 1048 1184 1328   768  771  777 806 -hsync -vsync
        EndSection
        #
        Section "Device"
          Identifier "S3"
          Vendorname "S3"
          BoardName "unknown"
        EndSection
        #
        Section "Screen"
          Driver      "accel"
          Device      "S3"
          Monitor     "moni"
          DefaultColorDepth 16
          Subsection "Display"
            Depth       16
    	Modes       "1024x768" "800x600"
    	ViewPort    0 0
          EndSubsection
        EndSection
    
      
    Wenn man noch keine geeigneten Modelines hat, so kann man xf86config verwenden, die Ausgaben statt nach /etc/X11/Xf86Config in eine andere Datei schreiben lassen und die Modelines von dort kopieren.
    Fertig ?
    du -s . ergibt bei mir ca. 3.3 MB

    xdm

    xfs


    Autor: Frank Richter, frichter@truckle.in-chemnitz.de