Konsole: stdin, stdout auf getrennte devices

Ich habe mich gerade halb tot gesucht nach einem Ansatz. Leider komme ich immer auf Pipes und > Operatoren, die auf einen Befehl angewendet werden.

Ich möchte nicht nur für einen Befehl stdin umleiten sondern dauerhaft für eine Konsole.
So, dass ich stdin z.B. auf ttyS0 habe und stdout und stderr auf tty0. Geht dass irgendwie? Ich habe schon in der inittab gestöbert bin aber daraus nicht schlau geworden.
Ließe sich stdout auch auf zwei devices ausgeben (beispielsweise noch um auf einem Nadeldrucker mitzuprotokollieren)?

Danke für jeden Tipp oder jedes Schlüsselwort für die weitere Suchmaschinensuche.
#tillfr

Hallo,

Ich möchte nicht nur für einen Befehl stdin umleiten sondern
dauerhaft für eine Konsole.
So, dass ich stdin z.B. auf ttyS0 habe und stdout und stderr
auf tty0. Geht dass irgendwie?

Wofür brauchst du das denn? Spontan fällt mir nichts ein, aber vielleicht lässt sich dein Problem ja anders lösen…

Ich habe schon in der inittab
gestöbert bin aber daraus nicht schlau geworden.
Ließe sich stdout auch auf zwei devices ausgeben
(beispielsweise noch um auf einem Nadeldrucker
mitzuprotokollieren)?

Du kannst mit

echo foo | tee bar

sowohl eine Ausgabe (hier „foo“) sowohl auf stdout als auch in einer Datei haben. Wenn du keine Datei, sondern einen weiteren Stream haben willst, kannst statt einer Datei eine Named Pipe (FIFO) nehmen.

Oder du kannst dir ein kleines Shellscript schreiben, dass auf verschiedene Streams schreibt:

while read i
do echo "$i"
echo "$i" \>&3
echo "$i" \>&4

Dann hast du die Ausgabe in stdout (filehandle 1) und in den streams 3 und 4. Dann kannst du weiter in andere Programme pipen, umleiten etc.

Noch ein kleiner Tipp: stdout ist per default Zeilengepuffert, wenn es gepiped wird aber nicht. D.h. es kann sein, dass du erst eine Ausgabe sieht, wenn schon einige Zeilen in den stream geschrieben wurden.

Grüße,
Moritz

Konkret: Embedded System mit GraKa ohne KBD
Hi Moritz.

echo foo | tee bar

Darauf bin ich auch schon gestoßen. Leider funktioniert das auch wieder nur für den ausgeführten Befehl.

Um das Hauptproblem konkret zu beschreiben, warum ich mit der ganzen Experimentiererei angefangen habe:

Ich habe ein System auf dem ich Linux zum Laufen bringen will. Es hat eine Grafikkarte und eine serielle Schnittstelle aber keine Tastatur und auch kein PS2/USB o.ä. um eine anzuschließen.

Ich kann dem Bootloader zwei Argumente (hier tty0 und ttyS0) angeben.
Das mingetty kommt aber nur auf einem (ich glaube es war das zuerst angegebene device). Auf dem anderen ist nach den Bootmeldungen Schluß.

Je nachdem, wie ich die beiden devices im Bootloader stelle habe ich also entweder den Login auf dem angeschlossenen Monitor, kann aber aufgrund nicht vorhandener Tastatur nichts machen, oder aber im Terminal am per RS232 angeschlossenen Rechner, kann dann aber auf dem angeschlossenen Monitor nur die Bootmeldungen bestaunen.

Also - Hauptproblem - wie bekomme ich den
* output auf virtuellem Terminal tty0
* input über serielle Schnittstelle ttyS0

Oder habe ich einfach die total falsche Sichtweise auf Aufbau und Funktion der ganzen Konstruktion?

Mit bestem Dank
Till

Tach #tillfr,

ich glaube, dir könnte ‚exec‘ innerhalb des Shell-Scripts helfen
(exec >stout.log 2>stderr.log leitet alle Ausgaben - fuer die Laufzeit des Skripts in die entsprechenden Files um, ob das auch mit STDIN funktioniert, habe ich bisher noch nicht ausprobiert).

Schau mal in den Manpages der Shell deiner Wahl.

gruss
bernhard

Script für Umleitung stdin?
Hi Bernhard.

ich glaube, dir könnte ‚exec‘ innerhalb des Shell-Scripts
helfen

Ich habe mal gerade versucht ein mingetty mit exec auf der virtuellen Konsole zu starten. Kam aber immer wieder im seriellen Terminal.
Außerdem, das Problem bleibt - der Login auf tty0 reagiert nicht auf Eingaben über die serielle Schnittstelle.

Ist mein Problem überhaupt mit einem Script lösbar?

Generell hätte ich auch noch eine Ethernet-Schnittstelle. Aber letztendlich besteht auch dort wieder das gleiche Problem wie bei ttyS0.

Viele Grüße
Till

Hallo,

Generell hätte ich auch noch eine Ethernet-Schnittstelle.

Und damit ssh-Zugriff, was alle deine Probleme loest. Yeah!
Voraussetzung ist natuerlich ein weiterer Rechner im LAN.

Gruesse,
Moritz

Voraussetzung ist natuerlich ein weiterer Rechner im LAN.

Rechner habe ich genug. Schließlich läuft das Terminal auch gerade auf einem anderen Rechner.
Dann könnte ich also Beispielsweise X auf diesem Rechner laufen lassen.

Dann habe ich aber immer noch auf dem angeschlossenen Monitor nur die Systemmeldungen, oder?

Es muß doch irgendwie möglich sein den stream von der seriellen Schnittstelle dauerhaft auf eine andere Konsole umzuleiten.

Grüße
Till

Hallo

So, dass ich stdin z.B. auf ttyS0 habe und stdout und stderr
auf tty0. Geht dass irgendwie? Ich habe schon in der inittab
gestöbert bin aber daraus nicht schlau geworden.
Ließe sich stdout auch auf zwei devices ausgeben
(beispielsweise noch um auf einem Nadeldrucker
mitzuprotokollieren)?

Bei mir kann ich wenn ich auf term1 bin:

 cmb pts/1 13:52 0.00s 0.15s 0.00s w

so auf term 2 schreiben:

$\> echo "Hallo Hallo" \> /dev/pts/2

Möglicherweise kannst Du mit ‚man 1 stty‘
dauerhaft umleiten.

Wenn Du eine ip als Quelle/Ziel hast,
bietet sich ‚man 1 netcat‘ an.

Grüße

CMБ

stty -F /dev/ttyS0
Hi Semjon.

Das klingt so, als wäre es nah dran. Im „man“ zu stty steht:

 -F, --file=DEVICE
 open and use the specified DEVICE instead of stdin

Irgendwie funktioniert es bei mir aber noch nicht mit

stty -F /dev/ttyS0

Ich probiere mal weiter.

$\> echo "Hallo Hallo" \> /dev/tty0

funktioniert bei mir tadellos.

Grüße

stty nutzlos, vielleicht wegen fehlendem login
Also ich habe jetzt mal in der inittab zwei logins als respawns eingetragen. Dazu noch den stty redirect mit der Option once, der den stdin von ttyS0 auf tty0 umleiten soll.

Ich bekomme jetzt zwar auf beiden Konsolen den login aber wahrscheinlich funktioniert ssty (wenn überhaupt so wie ich mir das vorstelle) erst nach einem erfolgreichen login.

Woher weiß eine Konsole eigentlich woher der stdin kommt? Ob die Tastatureingaben von einer USB- oder PS2-Tastatur kommen? Das muss doch irgendwo eingestellt werden, oder? Mit stty -a konnte ich keinen Hinweis darauf finden.

Bin dankbar für jeden Denkansatz.
`Till