Auf Ubuntu 14.04, MATE-Desktop. Ich habe gerade das Tilda-Terminal installiert und es zu den Startanwendungen hinzugefügt, genau wie /usr/bin/tilda
. Neustart, Tilda-Start und dann Folgendes bemerkt:
„Ihre Bildschirmgröße von 131072 x 1 ist falsch. Es muss mit Problemen gerechnet werden.“
Dann habe ich es versucht killall tilda
, Tilda erneut gestartet, dieselbe Meldung.
Weiß jemand, wie ich dieses Problem mit der falschen Bildschirmgröße beheben kann?
Antwort1
Was erzeugt diese Nachricht
Dies wird nicht von der Bourne Again-Shell erzeugt. Dies wird nicht von Tilda erzeugt.
Dies wird durch den ps
Befehl von erzeugtdas Procps-ToolsetDurchführungdiese Überprüfung in ihrer set_screen_size()
Funktion. Der ps
Befehl erfordert, dass Ihr Terminalgerät mindestens 9 Spalten mal 2 Zeilen hat, damit es Dinge vernünftig anzeigen kann. Irgendwo, möglicherweise ohne Ihr Wissen, rufen Sie auf ps
.
Der ps
Befehl ermittelt Ihre Terminalgröße direkt aus (der Zeilendisziplin) des Terminalgeräts, das an seine Standard-E/A-Dateideskriptoren angeschlossen ist, und ermöglicht die Überschreibung durch COLUMNS
Umgebungsvariablen LINES
, wenn deren Werte korrekt numerisch sind. Sie können sehen, was Ihr ps
Befehl sieht, um seine Bestimmung vorzunehmen, indem Sie Folgendes ausführen:
stty-Größe; printenv SPALTEN ZEILENSie können mit dem Aufziehen experimentieren,
ps
indem Sie beispielsweise Folgendes ausführen:SPALTEN=65535 ZEILEN=1 ps
Wenn Sie die Umgebungsvariablen COLUMNS
und auf die blöden Werte 131072×1 gesetzt haben, wie in der Ausgabe von gezeigt , dann tun Sie das einfach nicht. ☺ Es ist jedoch wahrscheinlicher, dass das Terminalgerät selbst diese Größe meldet, was Sie an der Ausgabe von sehen werden . (Beachten Sie, dass die Bourne Again-Shell nur die Werte dieser Shell-Variablen setzt, die, wenn sie nicht exportiert werden, nicht einmal an den Befehl in seiner Umgebung weitergegeben werden, auf die vom Terminalgerät gemeldete Größe. Dies ist eine Ablenkung, denn wenn die Umgebungsvariablen Unsinn sind, wird das TerminalgerätLINES
printenv
stty
checkwinsize
ps
checkwinsize
berichtet selbstUnsinn, und Letzteres ist das zugrunde liegende Problem, das angegangen werden muss.)
Deshalb könnte Tilda der Fehler sein, auch wenn die Meldung nicht ausgegeben wird. Die Größe des Endgeräts ist eine gemeinsam genutzte Ressource, die alles, was einen offenen Dateideskriptor für das Endgerät hat, beliebig mit einem ioctl()
Systemaufruf ändern kann. Aber es istkonventionellgesetzt, in dem Szenario, dass man eine Software verwendetTerminalemulatorprogrammwie Tilda, vom Terminalemulatorprogramm, wenn sich die Größe des GUI-Fensters ändert, in dem die Emulation angezeigt wird. Das Terminalemulatorprogramm erhält ein GUI-Größenänderungsereignis, konvertiert es in Spalten und Zeilen und stellt die Gerätegröße mit ein ioctl()
.
Das soll nicht heißen, dass nicht etwas anderes die Größe dieses Unsinns festgelegt hat. Schließlich kann man es festlegenselbstauf eine beliebige, unsinnige Größe, indem Sie beispielsweise einfach den folgenden Befehl ausführen:
stty Spalten 1 Zeilen 65535
Was uns zu … bringt.
So setzen Sie die Endgerätegröße zurück
Wenn Sie sich in der Situation befinden, dass das Endgerät eine unsinnige Größe meldet:
- Wenn Sie einen GUI-Terminalemulator verwenden, ändern Sie die Größe der GUI um etwa eine Spalte/Zeile. Dies sollte den Befehl auslösen
ioctl()
und die Terminalgröße auf einen sinnvollen Wert einstellen. - Stellen Sie die Größe auf einen sinnvolleren Wert ein (zum Beispiel):
stty Spalten 80 Zeilen 25
- Verwenden Sie den
reset
Befehl. Beachten Sie, dassreset
dadurch neben der Größe des Endgeräts noch viele andere Dinge festgelegt werden. - Wenn Ihr Terminalemulator DEC VT340/VT420 kompatibel ist, senden Sie die entsprechenden DECSCPP- und DECSLPP/DECSNLS-Steuersequenzen direkt aus oder verwenden Siedas Nosh-Toolset'S
console-resize
(auch bekannt alsresizecons
) Befehl, um sie auszugeben:Größenänderung 80x25