Wenn ich die serielle Konsole meines Systems benutze, ende ich immer mit $COLUMNS=80
und $LINES=24
.
Obwohl ich diese Variablen manuell ändern kann, ist es etwas ärgerlich, dies jederzeit zu tun, wenn die Größe des clientseitigen Terminalfensters geändert wurde.
Normalerweise verbinde ich mich mit der Konsole screen /dev/mytty baudrate
.
Das Ändern der $TERM
Umgebungsvariablen auf "screen" oder "xterm" hilft nicht.
getty
Muss ich mit einigen von denen anrufen, anstatt mit vt100?
Es erübrigt sich zu erwähnen, dass all dies gut funktioniert, wenn ich mit ssh eine Verbindung zu demselben Computer herstelle.
quelle
[[ $(tty) == /dev/ttyS0 ]] && trap res2 DEBUG
zu erhöhen , fügen Sie eine der Shell-Profilkonfigurationen hinzu (z . B./etc/profile
,~/.bash_profile
). Dadurch wird es nach jedem einzelnen Befehl ausgeführt (was nur dann sinnvoll ist, wenn Sie die Größe von Fenstern / Fenstern mit screen / tmux / terminal-emulator ändern).res
&res2
zu langsam sind und alles andere als den Einsatz auf der ersten Anmeldung. Auf meinen Rechnern dauert es beide 0,5 Sekunden, bis alle meine Befehle träge sind (wenn sie mit der DEBUG-Falle verwendet werden). Hoppla! Kann das nicht haben. Ich schätze, ich werde installierenxterm
.resize
ist schneller - normalerweise 0.002sec.busybox
genauso langsam vorkam.resize
ist dies keine Option.Nur zur Veranschaulichung, hier ist die Antwort auf dieses Problem (das Usenet hat gewonnen):
Konsolenanwendungen in virtuellen Terminal - Anwendungen ausgeführt wird (
xterm
,rxvt
und Freunde) erhaltenSIGWINCH
nach einer Größenänderung stattgefunden hat. Auf diese Weise kann die Anwendung das Fenster usw. im entsprechenden Signalhandler neu zeichnen.Leider gibt es bei Verwendung einer seriellen Konsole keinen solchen Mechanismus.
Es ist jedoch möglich, dass die Anwendung aktiv nach der aktuellen Fenstergröße der Konsole fragt . Das zweitbeste ist also, dies jedes Mal zu tun, wenn eine Eingabeaufforderung von der Shell gedruckt wird.
Dies kann erreicht werden, indem zuerst eine ausführbare Datei mit spezieller Größenänderung kompiliert und dann Folgendes verwendet wird
bashrc
:Dies ändert natürlich nicht die Einstellungen für die Konsolengröße in einer Konsolenanwendung zur Laufzeit.
quelle
resize
handelt, die auf Ihrem System installiert ist."Resizable" Terminals als solche sind ein Ergebnis von NAWS (
Negotiate About Window Size
von RFC 1073 Telnet Window Size Option ).Wenn Sie über einen seriellen Anschluss direkt mit dem Computer verbunden sind, ist keine Verhandlung erforderlich, und der Computer hat keine direkte Kenntnis über die Bildschirmgröße Ihres Terminals.
Wenn ein Terminal die Größe aushandeln kann, sendet der Computer
SIGWINCH
an Anwendungen, die im Terminal ausgeführt werden, und fordert sie auf, ihre Vorstellung von der Bildschirmgröße zu aktualisieren.Wenn der Computer die Bildschirmgröße nicht kennt, setzt er die durch
stty -a
(Zeilen und Spalten) angegebene Größe normalerweise auf Null. Für die interaktive Verwendung ist dies etwas unfreundlich, und einige Systeme verwenden UmgebungsvariablenLINES
undCOLUMNS
, um zu helfen. Die zugewiesenen Werte können aus der Klemmenbeschreibung abgeleitet werden; häufiger werden sie einfach hartcodiert. Die Konvention für diese Variablen verlangt, dass sie wirksam werden, sofern sie nicht ausdrücklich unterdrückt werden, z. B. in Fluchanwendungenuse_env
. Positiv zu vermerken ist, dass diese Variablen nützlich sein können, wenn keine zuverlässigen Informationen verfügbar sind. Auf der negativen Seite gibt es keine bequeme Methode zum Ändern dieser Variablen.Das
resize
Programm (ein mitgeliefertes Dienstprogrammxterm
) kann die Escape-Sequenz für Cursorpositionsberichte im VT100-Stil verwenden, um die Bildschirmgröße zu bestimmen. Dies kann über die Befehlszeile ausgeführt werden. Es gibt (wieder) keine bequeme Möglichkeit, dies automatisch zu tun.resize
Aktualisiert als Nebeneffekt die Informationen zu Zeilen / Spalten, die von angezeigt werdenstty
. Sein Einsatz für aktualisierten Umgebungsvariablen Bereitstellung ist vor allem nützlich für Fälle wie diese, woLINES
undCOLUMNS
sind festgelegt und aktualisiert werden soll.quelle
Hier ist eine weitere Lösung, die auf meinem eingebetteten Linux-System (Overo mit Angstrom) hervorragend funktioniert hat. Ich habe es gerade aus meiner .bashrc-Datei ausgeführt. Ich wollte die Größenänderung nicht verwenden, da dazu einige X-Pakete installiert werden müssen, und das wollte ich nicht.
Sagen Sie Ihrem Raspberry Pi, dass Ihr Terminal größer als 24 Zeilen ist Shallow Thoughts Blog
quelle
Falls Sie stattdessen FreeBSD verwenden könnten, gibt es den Befehl resizewin (1) , der genau das tut, was Sie wollen.
quelle
Wenn Sie eine Shell-Sitzung über eine serielle Leitung ausführen, ist es ausreichend, den
resize
Befehl innerhalb dieser Sitzung aufzurufen - nach dem Herstellen der Verbindung und nach jeder Änderung der Terminalgeometrie.Der
resize
Befehl ist Teil von xterm, hängt jedoch nicht von X11 ab. Zum Beispiel ist es auf Fedora separat verpackt alsxterm-resize
.So funktioniert es: Der Befehl zum Ändern der Größe misst die Höhe / Breite über einige Cursorbewegungen und sendet diese Werte dann über Escape-Sequenzen an das Terminal.
Mit einer Shell wie zsh werden auch die Variablen
LINES
und automatisch aktualisiertCOLUMNS
(alternativ können die export-Anweisungen ausgewertet werden, die der Befehl an stdout ausgibt).Warum dies notwendig ist: Mit einer lokalen oder ssh-Sitzung kann das Terminal die Sitzung über Geometrieänderungen informieren (vgl. SIGWINCH). Dieser Mechanismus funktioniert nicht über eine serielle Verbindung.
quelle
Hier ist eine einfache und schnelle Größenänderungsfunktion, die nur für Bash funktioniert. Es wurde von phk's res2 modifiziert, wobei bash verwendet wurde
read -d delim
, um zu vermeiden, dass das Timeout abgelaufen ist, um den Lesevorgang zu beenden.quelle