Shell unter Linux seriell weiterleiten

449
V0idst4r

Ich versuche, eine Shell an seriell (USB an RS232) weiterzuleiten, damit ich ein altes Monochrom-CRT-Terminal verwenden kann.

Wie kann ich eine Shell an einen seriellen Port weiterleiten, damit das andere Ende Befehle senden und die Ausgabe wie ein TTY lesen kann?

1
Wenn Sie sich Ihre laufenden Programme ansehen, sollten Sie einige Instanzen von "getty" oder "agetty" sehen, die Ihre Pseudo-Terminals (Ctrl-Alt-Fn) bedienen, beispielsweise "/ sbin / agetty --noclear tty1 linux". Wenn Sie eine neue Instanz erstellen, bei der "tty1" durch den Namen des seriellen Endgerätes ersetzt wird, sollten Sie sich an Ihrer seriellen Schnittstelle anmelden können. Sie müssen wahrscheinlich serielle Optionen hinzufügen (Baudrate, Bits pro Zeichen, Parität usw.), sofern Sie nicht die Standardeinstellungen verwenden. AFH vor 5 Jahren 1
Ja, ich habe auch getty probiert, außer, dass es den Tab meines Terminals tötet, nachdem ich meinen Anmeldenamen eingegeben habe V0idst4r vor 5 Jahren 0
Mir ist nicht klar, was du meinst. Ist die Terminal-Registerkarte, die verschwindet, diejenige, die "getty" gestartet hat? Bekommen Sie eine Shell am seriellen Terminal? AFH vor 5 Jahren 0
Ich erhalte die Anmeldeaufforderung, und sobald ich meinen Benutzernamen eingebe, tötet er das Programm, in dem ich agetty laufe. (Und dann passiert auf meinem Terminal nichts, bis ich es erneut starte). Ich vermute, dass ich von meinem init-System aus agetty laufen muss? V0idst4r vor 5 Jahren 0
Möglicherweise. In Ubuntu werden die `getty`-Prozesse von` / etc / init / tty? .Conf` gestartet. AFH vor 5 Jahren 0
Nevermind stellt sich heraus, dass es ein Problem mit Sudo war. Vielen Dank! V0idst4r vor 5 Jahren 0

1 Antwort auf die Frage

2
Kamil Maciorowski

Hinweis: In der Antwort werden nur wenige Lösungen von verschiedenen Standorten gesammelt. Im Moment habe ich keine Möglichkeit, sie zu testen.


SysVinit

Pre- systemdLinux kann verwenden sysvinit ist /etc/inittabzum Laichen gettyauf verschiedenen Endgeräten. Die Beispielzeile kann folgendermaßen aussehen (aus diesem alten Leitfaden entnommen ):

s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102 

Emporkömmling

Wenn Ihr Betriebssystem verwendet wird upstart, ist das Verfahren anders. ZB gibt es diese Anleitung :

  1. Erstellen Sie eine Datei /etc/init/ttyS0.confmit dem folgenden Inhalt :

    # ttyS0 - getty # # This service maintains a getty on ttyS0 from the point the system is # started until it is shut down again.  start on stopped rc RUNLEVEL=[12345] stop on runlevel [!12345]  respawn exec /sbin/getty -L 115200 ttyS0 vt102 
  2. Fragen Sie upstartnach demgetty

    sudo start ttyS0 

Systemd

Laut dieser Site kann eine systemdLösung so einfach sein wie

Um von einer seriellen Konsole Gebrauch zu machen, verwenden Sie einfach console=ttyS0die Kernel-Befehlszeile und systemdstarten automatisch eine Konsole darauf getty.

Sie würden wahrscheinlich Ihren GRUB2 dafür konfigurieren. Analysieren Sie, was Arch Wiki sagt, und passen Sie sich gegebenenfalls an Ihre Distribution an:

Um die serielle Konsole von Grub zu aktivieren, öffnen Sie sie /etc/default/grubin einem Editor. Ändern Sie die GRUB_CMDLINE_DEFAULTZeile, um die Konsole zu starten /dev/ttyS0. Beachten Sie im Beispiel unten, dass wir zwei Konsolen einrichten. eine an tty0und eine an der seriellen Schnittstelle.

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,38400n8" 

Nun müssen wir grub mitteilen, wo sich die Konsole befindet und welcher Befehl gestartet werden muss, um die serielle Konsole zu aktivieren (Hinweis: Wie oben für Linux-Kernel können mehrere Eingabe- / Ausgabe-Terminals in grub angehängt werden, z. B. GRUB_TERMINAL="console serial"würden sowohl Anzeige als auch seriell aktiviert werden):

## Serial console GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=38400 --unit=0 --word=8 --parity=no --stop=1" 

Erstellen Sie die grub.cfgDatei mit folgendem Befehl neu:

grub-mkconfig -o /boot/grub/grub.cfg 

Nach einem Neustart gettywird aufgehört /dev/ttyS0und erwartet 38400Baud, 8Datenbits, keine Parität und ein Stoppbit. Wenn Arch bootet, systemdstartet automatisch eine gettySitzung, um auf demselben Gerät mit denselben Einstellungen zu hören.

Beide Seiten sind sich einig, dass GRUB2 nicht auf dem seriellen Gerät hören soll, sondern nur gettynach dem Booten, dann benötigen Sie etwas Ähnliches

systemctl enable serial-getty@ttyS0.service systemctl start serial-getty@ttyS0.service 

Auf Nachfrage

Wenn Sie ein Problem haben, denken Sie daran, dass gettyes sich nur um ein Programm handelt. Es kann auf Anforderung oder von aus ausgeführt werden rc.local. Siehe man gettyfür weitere Einzelheiten. Ich denke, dein erster Versuch mag sein

sudo getty -L 115200 ttyS0 vt102 

(Bearbeiten) Dies ist das Feedback des OPs, das Benutzern mit ähnlichen Problemen helfen kann:

Ich musste es tun, sudo su -c "…"damit es richtig funktioniert.

Bei Bedarf musste ich sudo su -c "..." ausführen, damit es ordnungsgemäß funktioniert. V0idst4r vor 5 Jahren 0
Das Zeug zur Verwendung des seriellen Anschlusses als Konsole hat nichts mit den Hinweisen zur Aktivierung von getty zu tun und ist unabhängig von init. Daher passt es nicht wirklich unter die Überschrift "systemd" Wumpus Q. Wumbley vor 5 Jahren 0