Dieses Handbuch wird mit freundlicher Genehmigung von Sebastian Hetze auf den Servern der Linux Information Systems AG gehosted.

next up previous contents index
Next: Seriell einloggen Up: Datenreisen und reisende Daten Previous: Technische Voraussetzungen

Subsections


Kontaktaufnahme

Um die Netzwerkdienste wie eMail, News, telnet, ftp, irc und andere benutzen zu können, braucht man nicht gleich seinen eigenen Rechner zu vernetzen. Es reicht für den Anfang immer aus, als regulärer Benutzer auf einem anderen vernetzten Rechner eingetragen zu sein, der diese Dienste anbietet. Dafür muß man sich nicht körperlich zu dem anderen Rechner begeben, eine Modemverbindung dorthin reicht völlig aus.

Rechner, die solche Accounts anbieten, findet man in Mailboxlisten, wie sie in manchen Computermagazinen abgedruckt sind. Die in einigen der folgenden Beispiele aufgeführten Telefonlisten können ebenfalls als Einstieg dienen.

Für eine Datenreise ,,per Anhalter`` benutzt man Programme, die ein einfaches, serielles Terminal emulieren (nachahmen).

Bereits im frühen Unix wurden die zentralen Rechner über externe Geräte bedient. Zuerst waren das elektrische Schreibmaschinen (Teletypes oder tty's), später Bildschirmterminals. Diese Geräte werden seit jeher über eine serielle Schnittstelle mit dem Zentralrechner verbunden.

Noch heute gibt es solche ASCII-Terminals, mit denen sehr günstig aus einem Linux-PC ein System mit mehreren Arbeitsplätzen gemacht werden kann. Die Arbeitsweise der Terminals ist primitiv. Im Prinzip schicken sie jedes auf der Tastatur eingegebene Zeichen unverändert an den Rechner und stellen alle vom Rechner geschickten Zeichen auf dem Bildschirm dar. Die meisten Terminals, z. B. das vt100 von DEC, verstehen bestimmte Sonderzeichen, die sie als Befehle interpretieren und damit z. B. den Cursor positionieren, den Bildschirm löschen, zwischen Einfüge- und Überschreibmodus umschalten und sonst noch allerlei nützliche Sachen machen können.

Die Aufgabe eines ``dummen'' Terminals kann auch von einem Computer übernommen werden. Dazu muß ein Programm gestartet werden, das die Funktionen eines Terminals nachbildet. Außer den Funktionen eines seriellen Terminals bieten die meisten Terminalemulationen noch eine Reihe weiterer Features wie Telefonlisten, Scriptprogramme und Dateitransfer, mit denen den erweiterten Möglichkeiten/Anforderungen dieser Nutzung entsprochen wird.

Die minicom Terminalemulation

    Das Programm minicom von Miquel van Smoorenburg ist eine Terminalemulation für den Linux-ASCII-Bildschirm. In der Bedienung ist sie dem DOS-Sharewareprogramm TELIX vergleichbar.

Die Installation und Konfiguration von minicom ist Sache der Systemverwalterin. Das fertig angepaßte Programm wird weitgehend interaktiv durch Tastaturkommandos bedient. Alle minicom Befehle werden durch CONTROL-A (^A) eingeleitet[*], den Hilfsbildschirm erhält man mit dem Kommando ^A-Z.

     +===================================================================+
     |                     Minicom Command Summary                       |
     |                                                                   |
     |          Commands can be called by CTRL-A <key>                   |
     |                                                                   |
     |               Main Functions                  Other Functions     |
     |                                                                   |
     | Dialing directory..D  run script (Go)....G | Clear Screen.......C |
     | Send files.........S  Receive files......R | cOnfigure Minicom..O |
     | comm Parameters....P  Add linefeed.......A | Jump to a shell....J |
     | Capture on/off.....L  Hangup.............H | eXit and reset.....X |
     | send break.........F  initialize Modem...M | Quit with no reset.Q |
     | Terminal emulation.T  run Kermit.........K | Cursor key mode....I |
     | lineWrap on/off....W  local Echo on/off..E | Help screen........Z |
     |                                            | scroll Back........B |
     |                                                                   |
     |      Select function or press Enter for none.                     |
     |                                                                   |
     |             Written by Miquel van Smoorenburg 1992/1993           |
     +===================================================================+

Der Hilfsbildschirm

Installation und Konfiguration

Der folgende Abschnitt richtet sich hauptsächlich an die Systemverwalterin. Als Anwender des minicom-Programms können Sie zum Abschnitt ``Anwählen eines anderen Rechners'' springen.

  Die ausführbare minicom Datei sollte in einem Verzeichnis des Suchpfades liegen, der in der PATH Umgebungsvariablen eingetragen ist. minicom muß SUID-root laufen. Ein zusätzliches Programm zur Interpretation von Scriptdateien (runscript) und bei Version 1.4x und früher das Programm keyserv werden im Verzeichnis /etc erwartet. (Die Lokalisierung dieser Dateien wird vor dem Übersetzen der Quelltexte festgelegt und kann in verschiedenen Distributionen variieren.)

In die Datei /etc/termcap sollte ein spezieller Eintrag zur Terminalinitialisierung unter minicom eingefügt werden, mit dem die Darstellung der IBM-Grafikzeichen auf der Console möglich wird:

mc|minicom|mc80x25|termcap entry for minicom on the console:\
        :is=\E(U\E[m\E>\E[4;20l:\E[?8;25h\E[?1;5;6;7l:\
        :rs=\E(B\E[m\E>\E[4;20l:\E[?7;8;25h\E[?1;5;6l:\
        :bc=:as=:ae=:am=:vb=\E(B\007\E(U:\
        :tc=console:
Die Verwendung dieses Eintrags kann mit der Kommandozeilenoption `-t mc' erreicht werden. Um die Verwendung dieser und anderer Kommandozeilenoptionen für alle Anwender vorzubestimmen, kann die Umgebungsvariable MINICOM beispielsweise in der /etc/profile Datei mit einer entsprechenden Zeichenkette belegt werden.

Der erste Aufruf von minicom muß durch die Systemverwalterin erfolgen. Dabei ist die Option `-s' (setup) zu verwenden. Auf diese Weise kommt sie sofort in das Konfigurationsmenü und kann die für alle Benutzer gültige Grundeinstellung vornehmen.

            +=====[configuration]======+                                  
            | Filenames and paths      |                                  
            | File transfer protocols  |                                  
            | Serial port setup        |                                  
            | Modem and dialing        |                                  
            | Screen and keyboard      |                                  
            | Save setup as dfl        |                                  
            | Save setup as..          |                                  
            | Exit                     |                                  
            +==========================+

Das Setup- und Konfigurationsmenü


Die einzelnen Menüpunkte können mit den Cursortasten oder mit den vom vi bekannten Tasten j und k angewählt werden, ESC verläßt das Menü. Der letzte Menüpunkt erscheint nur der Systemverwalterin beim Setup, um das Programm direkt zu verlassen.

    +=======================================================================+
    | A - Download directory : .                                            |
    | B -   Upload directory : .                                            |
    | C -   Script directory : /usr/lib/minicom                             |
    | D -     Script program : /etc/runscript                               |
    | E -     Kermit program : /usr/bin/kermit -l %l -b %b                  |
    |                                                                       |
    |    Change which setting?                                              |
    +=======================================================================+

Einstellfenster für Dateinamen und Pfade

Die Verzeichnisse für Up- und Download  müssen vorhanden sein bzw. angelegt werden. Angaben ohne absoluten Pfad werden vom Heimatverzeichnis des aufrufenden Benutzers aus gesucht. Diese Verzeichnisse werden von den Dateitransferprotokollen benutzt, die daraus Dateien lesen, um sie auf einen anderen Rechner zu kopieren (Upload) oder dorthin Dateien schreiben, die sie von einem anderen Rechner erhalten (Download).

Das Scriptverzeichnis enthält die minicom Scriptdateien, beispielsweise für das automatische Einloggen. Loginname und Paßwort brauchen nicht im Script gespeichert werden, deshalb ist es kein Sicherheitsrisiko, hier ein zentrales Verzeichnis auch für die Loginscripts anzugeben.

Das runscript-Programm wird von minicom zur Ausführung der Scripts aufgerufen. Hier kann auch ein beliebiger andere Interpreter eingetragen werden. Die Syntax der Scriptdateien ändert sich natürlich entsprechend. Die Kanäle für Standardeingabe und Standardausgabe sind während der Bearbeitung des Scripts mit dem Modem verbunden, die Fehlerausgabe landet auf dem Monitor.

Mit ^A K kann kermit lokal als Client gestartet werden, nachdem auf der Gegenseite ein kermit-Server die Kontrolle über die serielle Schnittstelle übernommen hat. kermit ist ein klassisches Terminalprogramm mit integriertem Protokoll zum Dateitransfer.


Im File tansfer protocols Menü werden die Programme zur protokollierten Datenübertragung für den direkten Aufruf aus minicom konfiguriert.

Neben den Bekannten X- Y- Z-Modem Programmen, die unter Unix als Freie Software unter dem Namen rz/sz erhältlich sind, ist in dem Beispiel oben noch kermit als Client zur Datenübertragung aufgeführt.

+==============================================================================+
|     Name             Program               Need name Up/Down FullScr IO-Red. |
| A  zmodem     /usr/bin/sz -vv                  Y       U       N       Y     |
| B  ymodem     /usr/bin/sb -vv                  Y       U       N       Y     |
| C  xmodem     /usr/bin/sx -vv                  Y       U       N       Y     |
| D  zmodem     /usr/bin/rz -vv                  N       D       N       Y     |
| E  ymodem     /usr/bin/rb -vv                  N       D       N       Y     |
| F  xmodem     /usr/bin/rx -vv                  Y       D       N       Y     |
| G  kermit     /usr/bin/kermit -i -l %l -s      Y       U       Y       N     |
| H  kermit     /usr/bin/kermit -i -l %l -r      N       D       Y       N     |
| I    -                                                                       |
| J    -                                                                       |
| K    -                                                                       |
| L    -                                                                       |
|                                                                              |
|   Change which setting? (SPACE to delete)                                    |
+==============================================================================

Das Fenster zum Einstellen der Datenübertragungsprotokolle

Die Gerätedatei, über die minicom das Modem anspricht, sollte immer ein cua? Device sein. Die ttyS? Devices sind für ankommende Verbindungen vorgesehen. Gelegentlich wird wegen der größeren Aussagekraft ein (symbolischer) Link mit dem Namen /dev/modem angelegt, der auf das cua? Device zeigt, an dem das Modem angeschlossen ist. Diese Praxis birgt die Gefahr, den Mechanismus des Device-Locking durcheinanderzubringen, indem einige Kommunikationsprogramme für /dev/cua? konfiguriert sind, andere für /dev/modem. Hier liegt es allein in der Verantwortung der Systemverwalterin, für konsistente Nomenklatur zu sorgen.

    +=======================================================================+   
    | A -    Serial Device : /dev/modem                                     |   
    | B - Lockfile Location: /usr/spool/uucp                                |   
    | C -   Callin Program :                                                |   
    | D -  Callout Program :                                                |   
    | E -    Baud/Par/Bits : 38400 8N1                                      |   
    |                                                                       |   
    |    Change which setting?                                              |   
    +=======================================================================+

Die Auswahl der seriellen Schnittstelle


  Das Verzeichnis, in dem die Lockfiles angelegt werden, muß ebenso wie das Format, in dem diese Dateien vorliegen für alle Kommunikationsprogramme konsistent gehandhabt werden. minicom legt seine Prozeß-ID im ASCII Format ab.

Mit Callin/Callout können Programme bestimmt werden, die den Modemport zum Ein- bzw. Auswählen vorbereiten (beispielsweise ein uugetty beenden). Unter Linux sollten solche Methoden zum Device-Sharing nicht verwendet werden.

Weitere Informationen über das Device-Handling finden Sie im Abschnitt über getty.

Die Leitungsparameter können über ein weiteres Menü eingestellt werden.

Die Übertragungsgeschwindigkeit ist vom angeschlossenen Modem abhängig. Moderne Geräte mit Datenkompression (MNP5 oder V42bis) werden auf der Modem-Rechner-Verbindung mit einer festen Baudrate angesteuert, die höher sein sollte als der höchste anzunehmende Durchsatz der eigentlichen Modemverbindung. Bei 2400-Baud-Modems reichen 9600 bps in der Regel aus.

                    +===========[Comm Parameters]============+
                    |                                        |
                    | Current: 38400 8N1                     |
                    |                                        |
                    |   Speed          Parity          Data  |
                    |                                        |
                    | A: 300           H: None         M: 5  |
                    | B: 1200          I: Even         N: 6  |
                    | C: 2400          J: Odd          O: 7  |
                    | D: 4800                          P: 8  |
                    | E: 9600                                |
                    | F: 19200         K: 8-N-1              |
                    | G: 38400         L: 7-E-1              |
                    |                                        |
                    | Choice, or <Enter> to exit?            |
                    +========================================+

Die Einstellung der seriellen Schnittstelle


Die maximale Übertragungsrate kann mit dem setserial-Programm von 38400 bps auf 57600[*] bps gesetzt werden.

Ältere Modems ohne automatische Baudratenerkennung senden (und empfangen) die Daten mit genau der Übertragungsrate, mit der sie mit dem Rechner verbunden sind. Hier muß also die Einstellung der realen Modemverbindung angepaßt werden.

Die Einstellungen für Bytelänge, Parität und Stopbits sind fast immer 8-N-1 (8 Bit/Byte, keine Parität, ein Stopbit).

Weitere Einstellungen können zur Laufzeit nicht vorgenommen werden. Das RTS/CTS Hardware-Handshaking wird immer automatisch eingeschaltet.

 +====================[Modem and dialing parameter setup]=====================+
 |                                                                            |
 | A - Init string ......... ^MATZ^M                                          | 
 | B - Reset string ........ ^M~ATZ^M~                                        | 
 | C - Dialing prefix #1.... ATDP                                             | 
 | D - Dialing suffix #1.... ^M                                               | 
 | E - Dialing prefix #2.... ATDP                                             | 
 | F - Dialing suffix #2.... ^M                                               | 
 | G - Dialing prefix #3.... ATX1DP                                           | 
 | H - Dialing suffix #3.... ;X4D^M                                           | 
 | I - Connect string ...... CONNECT                                          | 
 | J - No connect strings .. NO CARRIER            BUSY                       | 
 |                           NO DIALTONE           VOICE                      | 
 | K - Hang-up string ...... ~~+++~~ATH^M                                     | 
 | L - Dial cancel string .. ^M                                               | 
 |                                                                            | 
 | M - Dial time ........... 45      P - Auto baud detect .... Yes            | 
 | N - Delay before redial . 60      Q - Drop DTR to hangup .. Yes            | 
 | O - Number of tries ..... 10      R - Modem has DCD line .. Yes            | 
 |                                                                            |
 |  Change which setting?       (Return or Esc to exit)                       |
 +============================================================================+

Die Einstellung der Modembefehle


Bei den Hayes-kompatiblen Modems sind die hier dargestellten Steuerbefehle normalerweise ausreichend. In Spezialfällen müssen die entsprechenden Sequenzen dem Modemhandbuch entnommen werden.

Wenn das Modem im Auto-Answer-Mode betrieben wird, um die Einwahl in das System zu erlauben, ist es sinnvoll, die DTR-Leitung beim Auflegen ,,Low`` zu setzen (Drop DTR to hangup.. YES), um sicherzustellen, daß das Modem erst Anrufe entgegennimmt, wenn das getty wieder ein DTR-Signal gibt.

              +===============[Screen and keyboard]===============+
              |                                                   |
              | A - Command key is      : ^A                      |
              | B - Backspace key sends : DEL                     |
              | C - Status line is      : enabled                 |
              |                                                   |
              |  Change which setting?  (Esc to exit)             |
              |                                                   |
              +===================================================+

Bildschirm- und Tastatureinstellungen


Von der in diesem Menü angebotenen Möglichkeit, die Tastenkombination für die minicom-Kommandos von CONTROL-A auf die ALT-Taste zu legen, sollte bei der deutschen Tastatur kein Gebrauch gemacht werden. Der Tastaturtreiber produziert hier Codes, die von MINICOM nicht unbedingt korrekt interpretiert werden. Das kann zu einer Situation führen, aus der nur ein kill(1) wieder herausführt.

Wenn Sie als Superuserin alle Einstellungen für Ihr System eingegeben haben, können Sie diese Konfiguration als Default für alle Anwender speichern (Save setup as dfl im Konfigurationsmenü).

WICHTIG!

Um den normalen Benutzern den Aufruf von minicom zu erlauben, müssen Sie die Benutzernamen in der Datei /etc/minicom.users eintragen.

Anwählen eines anderen Rechners

  Das Terminalprogramm minicom verwaltet eine Telefonliste im Heimatverzeichnis eines jeden Benutzers. Diese Liste kann im Dial-Menü interaktiv bearbeitet werden. In dieses Menü gelangen Sie durch das Tastenkommando ^D RETURN.

  +---------------------------[Dialing Directory]----------------------------+
  |     Name               Number       Line Format Terminal Script          |
  |  1  LunetIX          030 6235097     38400 8N1    VT100  unixlogin       |
  |  2  INTERW.          030 2513771     38400 8N1    VT100  unixlogin       |
  |  3  Access           030 2513771     38400 8N1    VT100  unixlogin       |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |                                                                          |
  |              ( Press Escape to exit.. )                                  |
  +--------------------------------------------------------------------------+

Das Wählmenü


Mit den Cursortasten oder den vom vi Editor bekannten Tasten h, j, k, und l kann im oberen Fenster ein Eintrag in der Telefonliste ausgewählt (hoch/runter) und im unteren Fenster eine Aktion für diese Telefonnummer bestimmt werden (links/rechts). Die Aktion wird ausgeführt, sobald die Wahl mit RETURN bestätigt ist.

Mit Add wird ein leerer Eintrag unter dem aktuellen angelegt. Mit Edit kann der aktuelle Eintrag verändert werden. Dazu erscheint die folgende Maske:

    +=======================================================================+
    | A -   Name               : LunetIX                                    |
    | B -   Number             : 030 6235097                                |
    | C -   Dial string #      : 1                                          |
    | D -   Local echo         : No                                         |
    | E -   Script             : unixlogin                                  |
    | F -   Username           : she                                        |
    | G -   Password           : <Passwort>                                 |
    | H -   Terminal Emulation : VT100                                      |
    | I -   Line Settings      : 38400 8N1                                  |
    |                                                                       |
    |    Change which setting?                                              |
    +=======================================================================+

Eingabefenster für einen Eintrag im Wählmenü


Die meisten Einträge dieser Maske haben aussagekräftige Namen.

Der Dial string wird im ,,Modems and dialing`` Setup-Menü festgelegt. Die Systemverwalterin sollte die Grundeinstellung von minicom so durchgeführt haben, daß Sie hier immer mit dem `` Dial String #1'' auskommen dürften. Local echo ist eine Einstellung für Halb-Duplex-Verbindungen (ein Relikt aus dem Mittelalter der Datenfernübertragung).

Das Script wird unmittelbar nach erfolgreichem Verbindungsaufbau abgearbeitet (Login-Script). Die Einträge Username und Password können im Login-Script verwendet werden.

Wenn Sie einen Eintrag des Wählmenüs mit Dial bestätigen, wählt das Modem automatisch die Telefonnummer und versucht eine Datenverbindung herzustellen. Ist dieser Versuch erfolgreich, wird die login: Meldung der gegenstelle an die lokale minicom-Terminalemulation gesendet. In der Beispielkonfiguration oben wird diese Meldung automatisch durch das unixlogin Script beantwortet. Sie können diese Prozedur natürlich auch von Hand erledigen.

Nachdem Sie sich in dem fremden Rechner eingeloggt haben, können Sie dort so arbeiten wie an Ihrem Linux-Rechner.

Automatische Frage- und Antwort-Spiele

Mit dem runscript-Programm kann minicom Scriptdateien ablaufen lassen. Die Standardkanäle von runscript werden mit der seriellen Schnittstelle verbunden. Auf diese Weise können automatische Dialoge abgewickelt werden, beispielsweise zum Einloggen in den angewählten Rechner (remote host).

  In einer Scriptdatei für runscript können folgende Befehle verwendet werden:

send String
Die Zeichenkette String wird in den Standardkanal geschrieben. Wenn ein einzelnes Wort gesendet werden soll, braucht es nicht in Anführungszeichen eingeschlossen werden, sonst muß die Zeichenkette in Anführungszeichen stehen. Es werden die üblichen Escape-Sequenzen akzeptiert:
\a
Alarm (Piep)
\b
Schritt zurück
\c
kein Zeilenende
\f
Seitenvorschub
\n
Zeilenende
\r
Wagenrücklauf
\nnn
das Zeichen mit dem (oktalen) Code nnn
Außerdem können alle Umgebungsvariablen in der Form $(VARIABLE) eingefügt werden. Zwei neue Variable werden von minicom mit den entsprechenden Werten belegt, wenn diese in der Telefonliste angegeben sind. In $(LOGIN) steht der Loginname und in $(PASS) das Paßwort für die aktuelle Telefonverbindung.
print String
Im Unterschied zu send schreibt print die Zeichenkette String in den Fehlerkanal, der mit dem lokalen Bildschirm verbunden ist.
Label:
Mit dem Label wird eine Zeile markiert, in die mit einer goto oder gosub Anweisung gesprungen werden soll.
goto Label
Das Script-Programm wird in der mit Label markierten Zeile fortgesetzt.
gosub Label
Im Unterschied zum Sprung mit goto kann beim gosub-Sprung durch eine return Anweisung an die Absprungstelle zurückgekehrt werden. gosub-Aufrufe dürfen verschachtelt werden.
return
Die Subroutine wird beendet und das Programm mit der Zeile nach dem gosub fortgesetzt, das diese Subroutine aufgerufen hat.
! Kommando
Das externe Kommando wird ausgeführt. Der Status wird in der Umgebungsvariablen $? zurückgeliefert und kann in einer if Abfrage verwendet werden.
exit [Wert]
Die Scriptbearbeitung wird abgebrochen und der angegebene Wert als Satus weitergegeben.
set Variable Wert
Die Variable wird mit dem Wert belegt. Variablennamen können nur die Buchstaben a-z sein. Als Werte sind sowohl ganze Zahlen als auch Zeichenketten erlaubt.
inc Variable
Die Variable wird um eins erhöht.
dec Variable
Die Variable wird um eins erniedrigt.
if Wert Operator Wert Statement
Das Statement wird ausgeführt, wenn der Wertevergleich wahr ist. Als Operatoren sind <, > und = erlaubt.
timeout Wert
Der Timeout wird auf den Wert gesetzt. Voreinstellung sind 120 Sekunden außerhalb einer expect Anweisung und 60 Sekunden innerhalb einer expect-Anweisung. Wenn der Timeout abgelaufen ist, wird die Bearbeitung des Scripts automatisch abgebrochen.
verbose {on|off}
Wenn verbose `on' ist, werden alle Zeichen, die vom Standardkanal gelesen werden, im Fehlerkanal (also auf dem Bildschirm) dargestellt.
sleep Wert
Die Ausführung des Scripts wird die angegebene Anzahl Sekunden angehalten.
expect { Muster [Statement]...}
Es werden so lange Zeichen aus dem Eingabekanal gelesen, bis eines der Muster darin gefunden wird. Dann wird entweder das dazu gehörende Statement ausgeführt, oder, wenn keins vorhanden ist, die expect Anweisung verlassen.

Das Muster ist eine Zeichenkette wie bei send. Im Muster können keine regulären Ausdrücke verwendet werden.

break
Zu einer timeout-Zuweisung innerhalb einer expect-Anweisung kann das Statement break angegeben werden, um den Abbruch der Scriptbearbeitung zu verhindern und die Fortsetzung nach der expect Anweisung zu erreichen.
call Scriptdatei
Die Ausführung verzweigt zur angegebenen Scriptdatei. Wenn diese Datei fehlerfrei ausgeführt wurde, wird die aktuelle Scriptdatei mit der auf diese Anweisung folgenden Zeile fortgesetzt.

  Das folgende Beispiel ist nicht nur geeignet, die Benutzung von runscript zu veranschaulichen, es ist überhaupt das Standardscript zum Einloggen in alle Linux-Systeme.

# Standard UNIX Loginscript.
# Mit diesem Script von Miquel van Smoorenburg kann das Einloggen 
# in (fast) alle Linux{\bindestrich} und UNIX{\bindestrich}Boxen automatisiert werden.
#
        # Einige Variable
        set a 0
        set b a
        print Trying to Login..
        # Irgendjemand hat wohl festgestellt, daß das erste send
        # manchmal besser übersprungen wird.
        goto skip
loop1:
        # Der Loginname wird höchstens dreimal gesendet.
        send ""
        inc a
skip:
        if a > 3 goto failed1
        expect {
                "ogin:"
                "ssword:"      send ""
                "NO CARRIER"    exit
                timeout 2       goto loop1
        }
loop2:
        send "$(LOGIN)"

        # Das Passwort wird auch nicht mehr als dreimal gesendet.
        inc b
        if b > 3 goto failed1
        expect {
                "ssword:"
                "ogin:"         goto loop2
                timeout 2       goto loop2
        }
        send "$(PASS)"
        # Wenn nicht innerhalb von 3 Sekunden ein "incorrect" ankommt,
        # war das Passwort wohl OK. Wenn nach dem Terminal gefragt
        # wird, stellen wir vt100 ein.
        expect {
                "TERM="         send "vt100"
                "incorrect"     goto loop1
                timeout 3       break
        }
        exit
failed1:
        print \nLogin fehlgeschlagen (Falsches Passwort?)
        exit

Dateien übertragen

Mit einer Terminalemulation wie minicom kann auf einem entfernten Rechner gearbeitet werden wie auf dem lokalen. Wenn die Verbindung mit einem Hochgeschwindigkeitsmodem hergestellt wird, kann an der Bildschirmausgabe kein Unterschied zwischen Local- und Remote-Host festgestellt werden.

Allerdings können alle Arbeitsresultate, die als Dateien vorliegen, nicht ohne weiteres auf dem lokalen Rechner weiterverarbeitet werden. Bei einem echten vt100-Terminal macht das auch keinen Sinn, weil so ein Terminal eben nur Daten auf dem Bildschirm anzeigen bzw. von der Tastatur lesen kann. Bei einem Linux-Rechner, der ein vt100-Terminal emuliert, ist das eine ernste Einschränkung.

Dateien, die nur druckbare Zeichen enthalten, können theoretisch durch einfache Ausgabeumlenkung in einer Datei gespeichert werden. Der Capture Buffer bietet die Möglichkeit, eine Mitschrift einer kompletten Terminalsitzung abzuspeichern. So eine Mitschrift kann dann anschließend bearbeitet werden, indem beispielsweise einzelne Teile in neue Textdateien kopiert werden.

Viele Dateien enthalten aber nichtdruckbare Zeichen. Um solche Dateien übertragen zu können, werden spezielle Programme benötigt, die für die Dauer der Übertragung den Datenstrom umlenken.

Um auch bei alten Modems ohne automatische Fehlerkorrektur einen zuverlässigen Dateitransfer zu gewährleisten, benutzen die Übertragungsprogramme Protokolle mit Fehlererkennung. Die Datei wird nicht als Ganzes übertragen, sondern in kleinen Stücken. Jedes Stück wird gemeinsam mit einer Checksumme (Cyclic Redundancy Check, CRC) gesendet, so daß der Empfänger die korrekte Übertragung nachprüfen kann. Im Fehlerfall wird das Paket noch einmal angefordert.

Ein beliebtes Transferprotokoll ist mittlerweile in der dritten Generation verbreitet. Die Protokolle sind als X- Y- und Z-Modem bekannt. Die Kommandos rx, rb und rz für den Empfang bzw. sx, sb und sz für das Senden implementieren diese Protokolle unter Linux.

  Die Y- und Z-Modem-Protokolle übertragen den Dateinamen gemeinsam mit der eigentlichen Datei. Von den Empfangsprogrammen benötigt deshalb nur rx (X-Modem) einen Dateinamen auf der Kommandozeile. Das Z-Modem-Protokoll verringert die Paketgröße bei hoher Fehlerrate, um den Overhead durch mehrfach angeforderte Pakete zu minimieren. Außerdem werden ununterbrochen Pakete ohne Bestätigung des Empfängers (Acknowledgement, ACK) übertragen. Erst wenn ein Fehler erkannt wird, unterbricht das empfangende Programm den Datenfluß und fordert das fehlerhafte Paket nochmal an. Das Z-Modem-Protokoll zeigt die höchste Übertragungsrate aller Protokolle.

  Das kermit-Kommunikationsprogramm benutzt ein eigenes Protokoll zum Dateitransfer. In der hier dargestellten Form wird das Programm so aufgerufen, daß es nur den Dateitransfer durchführt. Auch hier ist wie beim Aufruf des interaktiven Programms darauf zu achten, daß eine .kermrc-Datei im Heimatverzeichnis die korrekten Startparameter setzt.

  Die rzsz-Programme unter Linux lesen aus der Umgebungsvariable RZSZLINE den Port, auf dem die Übertragung laufen soll (beispielsweise /dev/cua1). Um eine Dateiübertragung vom Remote- zum Localhost zu starten, wird zuerst auf dem anderen Rechner ein Befehl wie der folgende eingegeben:

$ sz foo.bar.tgz
**B00000000000000
Dadurch wird das sz (send z-modem) Programm für die Datei foo.bar.tgz gestartet. Die ,,Antwort`` **B00000000000000 kann von anderen Terminalemulationen für den automatischen Start eines Z.Modem Empfangs genutzt werden. Im Fall von minicom muß der Dateitransfer auch auf dem lokalen Rechner manuell gestartet werden. Dazu wird nach dem Tastaturkommando ^A r (receive) das Z-Modem-Protokoll ausgewählt. Der Fortschritt der Übertragung kann dann in einem kleinen Bildschirmfenster beobachtet werden. Die empfangene Datei wird im Downloadverzeichnis abgelegt.    

term

   Der term-Server von Michael O'Reilly und die dazugehörigen Clients trsh, tupload, tredir, txconn und tmon erlauben die gleichzeitige Benutzung mehrerer logischer Datenkanäle auf einer seriellen Leitung. Die ein wenig an SLIP erinnernde Funktionalität wird vollkommen ohne Kernelunterstützung und ohne privilegierte Ausführungsrechte erreicht.

An jedem Ende übernimmt jeweils ein term-Server die vollständige Kontrolle über den Datenfluß auf der seriellen Verbindung. Die lokalen Clients verbinden sich über ein Unix-Domain-Socket mit dem lokalen term-Server. Die beiden Server tauschen Datenpakete aus und bedienen so die Clients auf beiden Seiten. Die beiden Server arbeiten gleichberechtigt, es können von beiden Seiten mehrere Benutzer die Verbindung nutzen.

Kurzer Überblick

Der term-Server ist nicht in der Lage, selbst eine Verbindung zu einem anderen Rechner aufzubauen. Um eine term-Session zu starten, muß zuerst eine normale Terminalverbindung hergestellt werden. Dann wird der term-Server auf dem Remote-Host (dem anderen Rechner) im Vordergrund gestartet, indem auf der Kommandozeile das term-Programm aufgerufen wird. Daraufhin übernimmt term die Kontrolle über ,,seinen`` Port. Der Shellprompt wird nicht wieder ausgegeben.

Ohne das Terminalprogramm zu beenden, muß daraufhin auf dem lokalen Rechner der zweite term-Server gestartet werden. Hierbei müssen die Standardkanäle mit dem Modemdevice verbunden werden. Die meisten Terminalprogramme bieten auf die eine oder andere Weise die Möglichkeit, lokale Kommandos mit dieser Umleitung aufzurufen. Hierbei muß aber darauf geachtet werden, daß das Terminalprogramm tatsächlich die Schnittstelle transparent macht, also alle Zeichen aus beiden Richtungen unverändert weiterleitet.

Es ist aber möglich, von einer anderen Shell aus das term-Programm im Hintergrund zu starten, indem beispielsweise die folgende Kommandozeile eingegeben wird:

 $ term -v /dev/cua1 2> /dev/null &
[1] 12396
 $

Wenn beide Server gestartet sind, kann von jeder Shell mit den geeigneten Benutzerrechten ein term-Client gestartet werden.

  Mit dem trsh-Client kann eine interaktive Shell auf dem Remote-Host gestartet werden (wie rlogin). Ebensogut kann auch ein einzelnes Kommando remote ausgeführt werden.

  Mit tredir können beliebige IP-Ports des lokalen Systems auf Ports des Remote-Host umgelenkt werden. Auf diese Weise können Internetdienste des Remote-Host auch auf dem lokalen Rechner benutzt werden.

  Mit tupload können Dateien über die serielle Verbindung kopiert werden.

  Der txconn-Client wird auf dem Remote-Host gestartet und richtet ein logisches X11-Display ein. Alle X11-Clients die dieses Display benutzen, werden mit dem lokalen X11-Server verbunden.

Der term Server

  Im Unterschied zur einfachen Terminalemulation, die keine besonderen Anforderungen an den Remote-Host stellt, muß der term-Server auf beiden Rechnern installiert sein. Sowohl der Server als auch die Clients arbeiten mit normalen Benutzerrechten. Die Programme stehen unter der GNU General Public License und sind deshalb als Quelltexte erhältlich. Es ist möglich, mit einem normalen Benutzeraccount das term-Paket zu installieren, vorausgesetzt, es ist ein C-Compiler auf dem System installiert und zugänglich. Die Quelltexte sind für verschiedene Systeme vorbereitet. Ohne Garantie und Anspruch auf Vollständigkeit sind das NeXT, AIX, BSD, SGI, SVR4, Solaris 2.1 und mit Einschränkung DEC Ultrix mit MIPS Compiler sowie HPUX. Wenn es Probleme beim Übersetzen gibt, kann der SysOp vielleicht weiterhelfen.

Die fertigen Programme müssen in einem Verzeichnis des Suchpfades (PATH) installiert werden. Das kann beispielsweise /usr/local/bin sein. Das Verzeichnis ~/bin geht ebenfalls. Außerdem braucht term das Verzeichnis ~/.term im Heimatverzeichnis des Benutzers. Wenn es nicht existiert, wird es beim ersten Aufruf automatisch erzeugt.

Um die einwandfreie Funktion des Servers zu erreichen, sollte in diesem Verzeichnis eine Konfigurationsdatei namens termrc angelegt werden. In dieser Datei können die folgenden Einstellungen vorgenommen werden (zwischen Option und Argument muß immer genau ein Leerzeichen stehen; leere Zeilen und solche, die mit einem # beginnen, werden ignoriert):

 
escape Nummer[-Nummer]
veranlaßt term, das angegebene Zeichen bzw. den Bereich von Zeichen nicht zu senden. Die Zeichen und Bereiche müssen vor dem ersten Start von term mit dem linecheck-Programm ermittelt werden.
ignore Nummer[-Nummer]
ist die zu escape korrespondierende Einstellung für die Gegenseite. Alle Zeichen und Bereiche, die auf der einen Seite mit escape ausgeblendet werden, sollten auf der anderen Seite mit ignore markiert sein.
compress {on|off}
schaltet die Datenkompression ein bzw. aus. Wenn bereits komprimierte Dateien gesendet werden oder die Modemverbindung mit einem komprimierenden Protokoll arbeitet, ist die zusätzliche Kompression durch term nicht sinnvoll. Die Kompression kann mit der -c Option für jeden Client einzeln ab- und eingeschaltet werden.
baudrate Geschwindigkeit
begrenzt die Geschwindigkeit, in der term Daten über die serielle Schnittstelle schickt. Diese Einstellung wird nicht auf den Schnittstellentreiber im Kernel übertragen, sie dient nur dem internen Timing von term. Der Wert sollte nicht größer als die reale Übertragungsrate gewählt werden.
timeout Zeit
bestimmt die Zeitspanne in 20stel Sekunden, die term nach dem Senden eines Pakets auf die Bestätigung der Gegenstelle wartet. Nach dieser Zeit wird das Paket automatisch nochmal gesendet.
window Größe
bestimmt die Anzahl der Datenpakete, die ,,blind`` gesendet werden können. Ein weiteres Paket wird erst gesendet, nachdem das erste bereits gesendete Paket bestätigt wurde. Voreinstellung ist 3.
noise on
Wenn dieser Schalter gesetzt ist, schreibt term alle Daten, die es nicht versteht, in die Fehlerausgabe. Auf diese Weise kann auf dem lokalen Rechner beispielsweise ein talk-Angebot oder eine Systemmeldung vom Remote-Host empfangen werden.
remote
bestimmt diese Instanz von term zum Remote-Server. Dieser Eintrag gehört in die termrc auf dem fernen Rechner.
sevenbit
muß auf 7-Bit Datenleitungen anstelle von escape 128-255 verwendet werden.
seven_in
7-Bit auf der ankommenden Leitung
seven_out
7-Bit auf der rausgehenden Leitung
shift Zahl
Alle Zeichen werden mit der angegebenen Zahl (0-255) XOR verknüpft. Auf diese Weise können bestimmte Zeichensequenzen aus intransparenten Übertragungsbereichen herausgeholt werden.
breakout Nummer
bestimmt das Zeichen mit der angegebenen Nummer zum ,,breakout``. Wenn fünf dieser Zeichen in der Standardeingabe erscheinen, wird der term-Server beendet.
chdir Verzeichnis
bestimmt das Verzeichnis, in dem die Kommandos für trsh starten. Relative Pfade für tupload werden auf dieses Verzeichnis bezogen.
denyrsh on
veranlaßt term, jede trsh-Verbindung von der Gegenseite abzulehnen.
chroot Verzeichnis
veranlaßt term, in einer chroot(2)-Umgebung zu starten.

Das folgende Beispiel kann als Ausgangspunkt für eigene Versuche dienen:  
# Beispiel einer ~/.term/termrc-Datei

compress off
# Für ein Modem mit Datenkompression brauchen die Daten von term
# nicht komprimiert zu werden.

escape 0-31
escape 128-159
# Diese Einstellung wird für die ersten Versuche empfohlen.
# Für eine Linux<->Linux-Verbindung brauchen normalerweise keine
# Zeichen ausgeschlossen zu werden

baudrate 38400
# Diese Übertragungsrate wird nur bei Textdateien erreicht.
# Vorkomprimierte Daten können zu Problemen führen, wenn das timeout
# nicht entsprechend hoch eingestellt ist.

timeout 100
# (100/20 = 5 Sekunden) ist für Modems ohne Kompression und Korrektur
# besser mit 50 anzusetzen.
# Bei komprimierenden Modems muß das timeout die Verzögerung zwischen
# senden der Daten in den Modempuffer und Übertragung der Daten mit
# anschließender Bestätigung überbrücken.

window 5
# Es werden bis zu fünf Pakete ohne Bestätigung vorausgeschickt.
# Sinnvolle Werte liegen zwischen 2 und 6, bei sehr schnellen
# Modems auch höher.

#shift 224
# Die ersten 32 Zeichen werden mit dem Bereich über 224
# vertauscht, die anderen werden ein wenig durcheinandergewürfelt.

#flowcontrol 500
# Alle 500 Zeichen wird ein Control-Q gesendet, damit ein
# versehentlich durch Control-S angehaltener Datenstrom wieder
# in Fluß kommt.

noise on
# Alle Daten (Pakete), deren Checksumme nicht stimmt, werden in den
# Standardfehlerkanal geschrieben.

#sevenbit
# Für den Fall, daß linecheck eine 7-Bit-Leitung feststellt.

#seven_in
# Wenn nur eine Richtung mit 7-Bit arbeitet, kann dem mit seven_in/
# seven_out Rechnung getragen werden.

#seven_out
# Die symmetrische Einstellung für die "andere Seite"

#ignore 7
# Ein ankommendes Klingelzeichen (ASCII 7) wird ignoriert.

#breakout 24
# Fünfmal ^X (Control-X) veranlaßt den term-Server, zu terminieren.

# chdir /home/she
# Alle trsh-Programme werden in meinem Heimatverzeichnis gestartet.

# remote
# Mit dieser Einstellung wird einer der beiden Server zum Slave
Die folgenden Umgebungsvariablen können benutzt werden:  
BAUDRATE
wird benutzt, wenn auf der Kommandozeile und in der Konfigurationsdatei keine anderen Werte bestimmt sind.
SHELL
bestimmt die Shell, die von trsh gestartet wird.
DISPLAY
wird benutzt, um den X11-Server für txconn zu finden.
TERMDIR
kann ein Verzeichnis bestimmen, in dem das .term-Verzeichnis mit dem Socket angelegt wird. Voreinstellung ist $(HOME).

Folgende Kommandozeilenoptionen werden erkannt:

-s Geschwindigkeit
setzt die maximale Übertragungsgeschwindigkeit
-n {on|off}
entspricht der noise Einstellung in der Datei termrc
-c {on|off}
schaltet die Datenkompression an bzw. ab
-r
bestimmt den Remote-Server
-f Anzahl
veranlaßt term, alle Anzahl Zeichen ein XON zwecks Flow-Control zu senden
-w Größe
setzt die Größe des Übertragungsfensters
-t Timeout
setzt das Timeout (in 20stel Sekunden)
-o
erzwingt das dauernde Senden von Paketen; wenn keine neuen Daten anliegen, wird das letzte Paket wiederholt
-a
schaltet den 7-Bit-Modus ein
-d Level
bestimmt den Debuglevel
-l Datei
bestimmt die Datei zum Logfile für Debugmeldungen und Rauschen
-v Device
veranlaßt term, auf der angegebenen Gerätedatei zu arbeiten.
-1
veranlaßt term, den Standardausgabekanal anstelle des Standardeingabekanals als Modemport zu verwenden; zusammen mit -v wird diese Option ignoriert

Leitungstransparenz

  term arbeitet auf bestehenden seriellen Verbindungen. Die Einstellungen der Schnittstellentreiber werden weitgehend von dem Terminalprogramm übernommen, mit dem der term-Server gestartet wird. Einige Einstellungen des Treibers können zu Veränderungen des Datenstroms führen. Beispielsweise können bestimmte Steuerzeichen ,,verschluckt`` oder ,,übersetzt`` werden. Auf diese Weise entstehen Lücken im Übertragungsspektrum. Weil term darauf angewiesen ist, daß alle Daten, die es sendet, auch genau so ankommen, wie sie abgeschickt wurden, müssen die intransparenten Bereiche aus dem Übertragungsspektrum ausgeblendet werden. Diese Zeichen werden dann als Escape-Sequenzen in transparente Bereiche eingeblendet.

Die Überprüfung der Leitungstransparenz kann nicht von term selbst durchgeführt werden. Die notwendigen Informationen müssen vom Anwender in der termrc-Datei abgelegt werden.

Um eine Verbindung zu prüfen, ist im term-Paket das linecheck-Programm enthalten. Dieses Programm muß auf beiden Seiten der Leitung mit der gleichen Umlenkung der Standardkanäle gestartet werden wie der term-Server. Die Fehlerausgabe muß in einer Datei gesichert werden. Das geschieht indem auf dem Remote-Host das folgende Kommando eingegeben wird:  

$ linecheck 2> /tmp/lineckeck.log

auf dem lokalen Rechner wird anschließend das folgende Kommando eingegeben (darauf achten, daß das Terminalprogramm nicht nebenherläuft):

$ linecheck </dev/cua1 >/dev/cua1 2> /tmp/lineckeck.log

Wenn beide Programme korrekt gestartet wurden, nehmen sie in einer ersten ,,Handshaking``-Phase Kontakt miteinander auf und senden sich dann gegenseitig in einer festgelegten Reihenfolge alle 256 möglichen Bytes zu bzw. bestätigen deren Empfang. Das dauert ziemlich lange, weil nur ein Zeichen pro Sekunde gesendet wird. Wenn die Übertragungssequenz abgeschlossen ist, geben die beiden Programme jeweils eine Zusammenfassung der gefundenen Übertragungsfehler. Mit dieser Information lassen sich dann die entsprechenden escape Bereiche für die andere termrc-Datei bestimmen.

trsh

  Syntax: trsh [-rc] [-t Server] [-p Priorität] [[-s] Kommando]

Ohne weitere Argumente startet trsh eine Shell auf dem Remote-Host, ähnlich wie rlogin. Der Remote-term-Server belegt dazu ein Pseudoterminal (pty).

Wenn ein Kommando angegeben ist, wird dieses Kommando remote ausgeführt. Durch die zusätzliche Option -s wird der Remote-Server veranlaßt, für die Kommandoausführung kein Pseudoterminal zu belegen.

Im Unterschied zu rsh wird die Fehlerausgabe bei trsh mit der Standardausgabe zusammengelegt. Außerdem wird die Verbindung zum Server und damit zum Remote-Kommando sofort unterbrochen, wenn trsh ein EOF (CONTROL-D) in der Standardeingabe findet.

tupload

Syntax: tupload [-rcfuvq] [-t Server] [-p Priorität] [-as Dateiname] Datei ...[Verzeichnis]

tupload kopiert eine oder mehrere Dateien von dem System, auf dem es aufgerufen wird, auf das andere. Wenn als letztes Argument ein Verzeichnis auf dem Zielrechner benannt ist, werden die Dateien dorthin kopiert.

Wenn eine Datei bereits auf dem Zielrechner existiert, wird automatisch getestet, ob sie kleiner ist als die lokale Datei. In diesem Fall wird davon ausgegangen, daß ein früherer Upload fehlgeschlagen ist, und die Datei wird vervollständigt.

tupload erlaubt folgende Kommandozeilenoptionen:  

-f
(force) existierende Dateien werden überschrieben
-u
(unlink) nach erfolgreicher Übertragung werden die Quelldateien gelöscht
-v
(verbose) gibt die Anzahl der übertragenen Bytes, den Namen der Zieldatei und die Übertragungsgeschwindigkeit aus
-q
(quiet) unterdrückt alle Meldungen
-as Dateiname
zu jeder Quelldatei kann mit dieser Option ein Name für die Zieldatei festgelegt werden

tredir

  Syntax: tredir [-rc] [-t Server] [-p Priorität] LocalPort [hostname:]RemotePort ...

tredir verbindet lokale TCP-Ports mit Ports auf dem Remote-Host oder auf einem weiteren Internetrechner. Beispielsweise verbindet das Kommando

$ tredir 2000 soho.lunetix.de:23
Redirecting 2000 to soho.lunetix.de:23
$
den (unbenutzten) lokalen IP-Port Nummer 2000 mit dem Port Nummer 23 (telnet) auf soho.lunetix.de (das ist nicht unbedingt der Remote-Host). Wenn diese Verbindung hergestellt ist, kann mit dem Kommando
$ telnet localhost 2000
Trying 127.0.0.1...
Connected to atlantis.
Escape character is '^]'.


Linux 0.99.12 (soho) (ttyp0)


soho login: _
eine ,,umgeleitete`` telnet-Verbindung zu soho.lunetix.de hergestellt werden. (Die Ausgabe von telnet zeigt deutlich, daß die ,,echte`` telnet-Verbindung zum Localhost atlantis besteht. Erst durch die Umleitung wird daraus eine Verbindung mit soho. Auf soho erscheint die Verbindung wiederum so, als sei sie von cicero.lunetix.de (dem Remote-Host) aus hergestellt worden.

Die Portnummern für die well known services sind in der Datei /etc/services aufgeführt. Durch Verbindung eines unbenutzten lokalen Ports mit einem Serviceport auf einem anderen Rechner können die entsprechenden Services vom lokalen Rechner aus benutzt werden.

Um die Ports 1:1 umlenken zu können, dürfen auf dem lokalen Rechner keine Anwendungen die entsprechenden Ports benutzen. Das bedeutet insbesondere, daß der inetd diese Ports nicht überwachen darf. Außerdem dürfen Ports mit Nummern bis 1024 nur mit Rootprivilegien geöffnet werden.

txconn

  Syntax: txconn [-rc] [-t Server] [-p Priorität]

txconn wird typischerweise einmal zu Anfang einer Session auf dem Remote-Host gestartet. Das Programm setzt sich automatisch in den Hintergrund. Dort stellt es ein logisches Display für alle X11-Clients zur Verfügung, das durch den term-Server auf den lokalen X11-Server umgeleitet wird. Normalerweise erhält das logische Display die Nummer 9. Der ,,echte`` X11-Server hat meistens die Nummer 0.

Um die X11-Clients auf dem Remote-Host zu veranlassen, mit dem logischen Display von txconn zu arbeiten, kann das Display auf der Kommandozeile angegeben werden:

$ xterm -title 'xterm auf cicero' -display cicero.lunetix.de:9 &
$ _
oder das Display wird für alle Clients gemeinsam in der Umgebungsvariablen DISPLAY gesetzt.
$ export DISPLAY=cicero.lunetix.de:9
$ _

tmon

Syntax: tmon [-rc] [-t Server] [-p Priorität]

tmon fragt in regelmäßigen Abständen vom lokalen term-Server die Anzahl der Clients und den Datendurchsatz ab und gibt die Werte auf dem Bildschirm aus.   


next up previous contents index
Next: Seriell einloggen Up: Datenreisen und reisende Daten Previous: Technische Voraussetzungen

Das Linux Anwenderhandbuch
(C) 1997 LunetIX