Wie kann ich nach versehentlichem Drücken von Strg-S in einem Terminal das Einfrieren aufheben?

729

Es ist eine Situation, die mir ziemlich oft passiert ist: Nachdem ich (mit einer anderen Absicht) Ctrl-Sin einem Terminal gedrückt habe, wird die Interaktion (Eingabe oder Ausgabe) mit ihm eingefroren. Es ist wahrscheinlich eine Art "Scroll Lock" oder was auch immer.

Wie schalte ich das Terminal danach frei?

(Dieses Mal habe ich mit apt-shelleinem bashInside urxvtgearbeitet - nicht sicher, welcher von ihnen für die spezielle Behandlung verantwortlich ist Ctrl-S: Ich habe die Befehlsgeschichte rückwärts durchsucht C-r, wie bei readline üblich, aber dann wollte ich "zurück" "Vorwärts durch die Geschichte mit dem Üblichen - zumindest in Emacs- C-s( 1 , 2 , 3 ), aber das führte zum Einfrieren des Terminals. Nun, Scrollen / Blättern, um vergangene Dinge anzusehen , funktioniert im Terminal immer noch, aber keine Interaktion mit den dort ablaufenden Prozessen.)

imz - Ivan Zakharyaschev
quelle
23
Ich habe in gearbeitet vimund Strg-S gedrückt, um meine Änderungen zu speichern. Uh-ohXD
ADTC
4
Warum gibt es das überhaupt?
neverMind9

Antworten:

862

Ctrl-Q

Wenn Sie dies insgesamt deaktivieren möchten, müssen Sie stty -ixonein Startskript verwenden. Verwenden Sie, damit eine beliebige Taste die Dinge wieder zum Laufen bringt stty ixany.

ps: Das macht weder das Terminal noch die Shell, sondern der Terminal-Treiber des Betriebssystems.

ak2
quelle
8
Danke! Übrigens, dort schlugen sie vor Ctrl-C; funktioniert es auch (Und an einem anderen Ort schlugen sie vor Ctrl-Q, genau wie Sie.)
imz - Ivan Zakharyaschev
23
Strg-C funktioniert, sendet aber auch ein Interrupt-Signal, das man normalerweise nicht möchte. (Übrigens, die Tasten, die für diese Dinge verwendet werden, können alle über konfiguriert werden stty.)
ak2
2
Ich erinnere mich, wie ich diese Kombination auf meinem Apple] [-Clone ausprobiert habe und sie dort auch funktioniert hat - Ctrl-Sund dann Ctrl-Qwieder aufgenommen wurde.
Sashoalm
19
DANKE GOTT !! Das nervt mich schon seit Jahren. Ich bin mir nicht sicher, warum VIM dies nicht als native Verknüpfung zum Speichern implementiert hat, anstatt was auch immer es tut. Gut zu wissen, dass es eine Flucht aus dem Gefängnis gibt, nämlich den eingefrorenen VIM-Bildschirm aufgrund der natürlichen Verwendung von STRG + S (Verknüpfung speichern), der in fast allen Anwendungen AUSSER VIM anwendbar ist.
Kraang Prime
8
@SanuelJackson Ctrl-S "Verknüpfung speichern" ist in fast allen DESKTOP-Anwendungen mit Ausnahme von vim verfügbar. Und außer Emacs. Und Nano. Und jede andere "Anwendung", die Sie auf einem Terminal ausführen können, genau weil sie bereits vom Terminal für die Flusskontrolle verwendet wird. Aus demselben Grund finden Sie keine Linux-Desktop-Anwendung, die die Tastenkombinationen Strg-Alt-FN verwendet: Sie werden bereits vom System verwendet.
Gerlos
384

Ctrl- Qist in der Tat die Antwort. Ich dachte, ich würde eine kleine Geschichte davon einwerfen, die zu lang ist, um in die Ränder der richtigen Antwort von ak2 zu passen .

In den dunklen Zeiten war ein Terminal ein großes Gerät, das über eine lange Leitung oder über Telefonleitungen mit Modems mit einem entfernten Gerät verbunden war (ursprünglich ein anderes Terminal, da die Bedienung von Teletypen so viel einfacher zu erlernen war als eine Telegrafentaste). Zu der Zeit, als Unix entwickelt wurde, war der ASCII-Code bereits gut etabliert (obwohl der konkurrierende EBCDIC-Code von IBM immer noch ein Muss war).

Die frühesten Terminals hielten eine gedruckte Aufzeichnung jedes empfangenen Zeichens. Solange die Zeichen nicht schneller ankamen, als der Druckkopf sie schreiben konnte, zumindest. Sobald jedoch CRT-basierte Terminals möglich waren, trat das Problem auf, dass nur etwa 25 Zeilen auf die CRT passten und 25 Zeilen mit 80 Zeichen genügend RAM darstellten, so dass niemand ernsthaft darüber nachdachte, mehr RAM für Zeichen bereitzustellen, die von oben gescrollt worden waren der Bildschirm.

Daher war eine Konvention erforderlich, um zu signalisieren, dass das Sendeende pausieren sollte, damit der Leser aufholt.

Der 7-Bit-ASCII-Code enthält 33 Codepunkte für Steuerzeichen (0 bis 31 und 127). Einige von denen waren wirklich gut Zwecke hergestellt, wie zum Beispiel NUL(leere Papier Bandführung zum Einfädeln, Lücken und Spleißstellen), DEL( „durchgestrichen“ Zeichen auf Papierband durch Stanzen all sieben Löcher angegeben), BEL(ding!) CR, LFUnd TAB. Aber vier wurden explizit definiert das Endgerät selbst (für die Steuerung DC1zu DC4aka Ctrl + Q, Strg + R, Strg + S und Strg + T).

Ich vermute, dass ein Ingenieur dachte, dass (wie es in der Mnemonik heißt) "S" für "Stop" und "Q" für "Continue" nicht allzu schlimm sind und DC3"Bitte aufhören zu senden" und DC1"OK " bedeuten , sende jetzt weiter ".

Sogar diese Konvention war bereits etabliert, als Unix bei Bell Labs das Nest verließ, um in die Welt hinauszugehen.

Die Konvention ist als Software-Flusskontrolle bekannt und in realen seriellen Geräten äußerst verbreitet. Die korrekte Implementierung ist nicht einfach, da die Verwendung eines dieser Zeichen für einen anderen Zweck im Kommunikationskanal verhindert wird und das Stoppsignal vor ausstehenden empfangenen Zeichen behandelt werden muss, um zu vermeiden, dass mehr als das empfangende Ende gesendet wird Griff.

Wenn es praktikabel ist, wird die Verwendung zusätzlicher Signale außerhalb des Bandes aus dem seriellen Datenstrom zur Flusssteuerung stark bevorzugt. Bei direkt verdrahteten Verbindungen, die zusätzliche Signaldrähte bieten, wird ein Hardware-Handshake verwendet, der diese Zeichen für andere Zwecke freigibt.

Natürlich verwendet das heutige Terminalfenster keinen physischen seriellen Anschluss, verfügt über Bildlaufleisten und benötigt überhaupt kein Software-Handshaking. Aber die Konvention bleibt bestehen.

Ich erinnere mich an die Behauptung, dass Richard Stallman in den ersten Versionen von Emacs Beschwerden über die Zuordnung von Strg + S zur inkrementellen Suche erhalten hat und dass er jedem Benutzer, der auf eine 7-Bit-Verbindung angewiesen war, eher unzufrieden war.

RBerteig
quelle
2
Thanke .. sehr interessant ... Ich habe mich gefragt,: Warum in aller Welt sollte jemand wählen , um weiter ein Verfahren mit „Q“ , die (jetzt) , die üblicherweise verwendet wird , für Quit ... Die QRST Gruppierung es erklärt .....
Peter.O
13
Vielen Dank für dieses Stück Geschichte. Ich habe kürzlich die Flusskontrolle in einem von mir verwalteten Terminal-Emulator standardmäßig deaktiviert, musste sie aber nach lautstarken Protesten von Unix-Traditionalisten, die sie noch verwenden, ziemlich schnell wieder aktivieren. Ich setze stattdessen das ixany-Bit, damit zumindest Leute, die ^ S drücken, ohne etwas über ^ Q zu wissen, nicht hängen bleiben.
Ak2
3
@RBerteig Ich bin auf etwas ähnliches gestoßen, lerne über Rücktaste und lösche. Backspace ist offiziell ^ H und Löschen ist ^? Einige Leute wie die Emacs-Entwickler (wieder Stallman?) Wollten ^ H für allgemeine Zwecke wie Verknüpfungen wie Help. Die Escape-Sequenz ^ [[3 ~ oder so etwas wurde erstellt, um ^ zu ersetzen? und die Rücktaste wurde jetzt das alte Löschzeichen ^?. Tatsächlich habe ich ncurses gesehen, die speziell auf Linux-Distributionen gepatcht wurden, um diese Schlüssel in terminfo neu zuzuordnen, wohingegen ncurses auf FreeBSD nicht gepatcht ist und einige der nervigen Verwirrungen verursacht, die dazu führen, dass die Rücktaste nicht funktioniert.
Pinguin359
23
Früher fragte ich mich, warum DEL den Code 127 hatte, anstatt mit den anderen Steuerzeichen gruppiert zu werden, bis ich zum ersten Mal mit Papierband und einem ASR33 spielte. Als ich bemerkte, dass es alle Löcher stanzte, was bedeutete, dass jedes zuvor gestanzte Zeichen durchgestrichen werden konnte, um es zu löschen, ergab es Sinn.
RBerteig
3
@SanuelJackson Es ist schon einige Zeit her, dass ich genau hinschaute, aber der vimrc-Standard, der mit Windows ausgeliefert wird, weist <Cs> seit vielen Jahren ": update" zu. Ich bin mir auch ziemlich sicher, dass ich es in der Vergangenheit in einigen Distributionen für gvim gesehen habe. Wenn Sie vim in einem Terminal verwenden, ist diese Historie dennoch sehr relevant. Moderne Terminal-Emulatoren implementieren die Flusssteuerungstasten immer noch. Selbst wenn sie von vim zugeordnet werden, werden sie nicht angezeigt, es sei denn, jeder Benutzer hat sich Mühe gegeben, die Flusssteuerung zu deaktivieren, wie in der akzeptierten Antwort beschrieben.
Drew