• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[GELÖST] VT420-Terminal & RS232 & agetty: Falsche Baudrate

Moinsen!

Nach einem Upgrade von openSuSE 11.3 auf 12.1 arbeitet mein museales VT420-Terminal nicht mehr. Nach etwas Fahndungsarbeit kam ich drauf, dass die an agetty übergebenen Parameter offensichtlich überschrieben werden. So schaut der relevante Abschnitt der inittab aus:

Code:
# getty-programs for the normal runlevels
# <id>:<runlevels>:<action>:<process>
# The "id" field  MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#
# Activate the DEC VT420 terminal as a second console.
S0:12345:respawn:/sbin/agetty -L 19200 ttyS0 vt420f
#cons:12345:respawn:/sbin/smart_agetty -L 38400 console

Die Zeile mit S0 hat in der 11.3er-Installation immer klaglos funktioniert, doch das Terminal gibt jetzt nicht mal den Login-Prompt aus, und auf Tastatureingaben kommt keine Reaktion.

Der agetty-Prozess wird zwar gestartet, doch mit der falschen Baudrate:

Code:
jacek@veteran:~> ps -ef | grep agetty
root      2778     1  0 13:34 tty1     00:00:00 /sbin/agetty tty1 38400
jacek     6022  6009  0 15:01 pts/2    00:00:00 grep --color=auto agetty

Noch besser: Ich habe stty ausprobiert:

Code:
veteran:/usr/share/X11/xkb/rules # stty -F /dev/ttyS0 19200

Doch nach dem Neustart ist die gesetzte Baudrate weg! :( Besser noch: Starte ich agetty von Hand, tauchen nur wirre Zeichen auf dem Terminal auf, und nach 3 Sekunden verabschiedet sich agetty auch schon wieder.

Weiß jemand von Euch, wie ich agetty dazu bringe, die richtige Baudrate (= 19'200 Bd) zu nahmen? Danke für jeden zweckdienlichen Hinweis!
 
OP
generalmajor

generalmajor

Hacker
Paradox! Gerade beim RS232-Ports muss man unbedingt Baudrate, Paritätsbits,… angeben, sonst kommt keine Kommunikation zu Stande.
 
OP
generalmajor

generalmajor

Hacker
Kann es sein, dass System-Konsolen in openSuSE 12.1 nicht mehr von init, sondern von systemd verwaltet werden…?
 

RME

Advanced Hacker
Hallo,

??? setserial - get/set Linux serial port information ???

Gruss,
Roland
 
OP
generalmajor

generalmajor

Hacker
…sagt mir das:

Code:
veteran:/home/jacek # setserial -ag /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

Seltsam ist aber: Bisher habe ich die Baudrate an agetty übergeben (smart_agetty benimmt sich übrigens nicht anders), und schon funzte alles. Echt seltsam finde ich aber, dass in der Ausgabe von ps das olle agetty gegen /dev/tty1 arbeitet, obwohl ich es in der inittab ausdrücklich auf /dev/ttyS0 angesetzt habe:

Code:
veteran:/home/jacek # ps -ef | grep agetty
root      2832     1  0 22:08 tty1     00:00:00 /sbin/agetty tty1 38400
root      5273  5220  0 22:22 pts/1    00:00:00 grep --color=auto agetty
 
OP
generalmajor

generalmajor

Hacker
Thread #114724 habe ich vorher auch gelesen, daher mein Verdacht, der Kerl lässt die inittab nunmehr links liegen. :-?

Und:

Code:
jacek@veteran:~> systemctl --all | grep getty
getty@tty1.service        loaded active   running       Getty on tty1
getty.target              loaded active   active        Login Prompts

Wieso tty1? Mein RS232-Port ist doch ttyS0, oder nicht??
 

RME

Advanced Hacker
Hallo,

Wieso tty1? Mein RS232-Port ist doch ttyS0, oder nicht??
Seltsam... ich denke Da macht systemd etwas von sich aus.

Wie schon gesagt, ich habe 12.1 nicht installiert und kann daher nur spekulieren. Aber vielleicht kannst Du ja etwas damit anfangen :D

So wie ich das verstehe kreiert systemd mehrere symbolische Links (sofern serial ports vorhanden) von der Art:

Code:
/etc/systemd/system/getty.target.wants/getty@tty1.service
/etc/systemd/system/getty.target.wants/getty@tty2.service
...
/etc/systemd/system/getty.target.wants/getty@tty6.service
Frage: ist bei Dir hier ttyS0 dabei?

Diese links zeigen auf die Datei:

Code:
/lib/systemd/system/getty@.service
und in dieser Datei sind dann Aliases, z.B.:

Code:
[Install]
Alias=getty.target.wants/getty@tty1.service getty.target.wants/getty@tty2.service... (etc.)
Falls ttyS0 nicht dabei ist (unter den Links oben), dann könntest Du mal versuchen das ttyS0 hinzuzufügen:

Entweder die Date entsprechend editieren, oder ein Link für S0 erstellen:

Code:
ln -s /lib/systemd/system/getty@.service \
      /etc/systemd/system/getty.target.wants/getty@ttyS0.service
(ich hoffe ich erzähle hier keinen Unsinn)

Gruss,
Roland
 
OP
generalmajor

generalmajor

Hacker
Genau das war es: agetty wird jetzt vom systemd gestartet, und im Config-File getty@.service stehen sämtliche Terminal-Einstellungen drin:

Code:
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.

[Unit]
Description=Getty on %I
BindTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.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

[Service]
Environment=TERM=linux
ExecStart=-/sbin/agetty %I 38400
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process

# Unset locale for the console getty since the console has problems
# displaying some internationalized messages.
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT$

# Some login implementations ignore SIGTERM, so we send SIGHUP
# instead, to ensure that login terminates cleanly.
KillSignal=SIGHUP

[Install]
Alias=getty.target.wants/getty@tty1.service
 
OP
generalmajor

generalmajor

Hacker
Jetzt hamma's aber: Im Verzeichnis getty.target.wants muss ein Sym-Link mit dem Namen der Terminal-Schnittstelle (hier ttyS0) gelegt werden:

Code:
lrwxrwxrwx  1 root root   34 15. Apr 13:16 getty@ttyS0.service -> /lib/systemd/system/getty@.service

Hernach muss in die Datei getty@.service ein Alias auf die Schnittstelle eingetragen werden:

Code:
[Install]
Alias=getty.target.wants/getty@tty1.service
Alias=getty.target.wants/getty@ttyS0.service

Jetzt funzt das Terminal anstandslos. Danke Euch! :)
 
Oben