Comment débloquer après avoir appuyé accidentellement sur Ctrl-S dans un terminal?

C'est une situation qui m'est souvent arrivé: après avoir appuyé sur (avec une intention différente) Ctrl-S dans un terminal, l'interaction (input ou sortie) est gelée. C'est probablement une sorte de "locking de défilement" ou peu importe.

Comment puis-je dégeler le terminal après cela?

(Cette fois, j'ai travaillé avec apt-shell intérieur d'un bash intérieur d' urxvt je ne sais pas lequel d'entre eux est responsable de la manipulation spéciale de Ctrl-S : je cherchais l'historique des commands en arrière avec Cr , comme d'habitude pour readline , mais ensuite je voulais aller "en arrière" à travers l'histoire avec l'habitude – au less dans Emacs– Cs ( 1 , 2 , 3 ), mais cela a causé le terminal à geler. Eh bien, défilement / pagination pour voir le passé les choses fonctionnent toujours dans le terminal, mais aucune interaction avec les process ne s'y déroule.)

CtrlQ

Pour désactiver cela, stty -ixon dans un script de démarrage. Pour permettre à n'importe quelle key d'get des choses à nouveau, utilisez stty ixany .

ps: Ce n'est ni le terminal ni le shell qui le fait, mais le pilote du terminal de l'OS.

CtrlQ est en effet la réponse. Je pensais que je jetterais un peu d'histoire de ce qui est trop long pour tenir dans les marges de la bonne réponse de ak2 .

De return dans l'âge des ténèbres, un terminal était un gros appareil connecté à un appareil distant (à l'origine un autre terminal parce que les télétypes étaient tellement plus faciles à apprendre qu'une key télégraphique) sur un long câble ou via des lignes téléphoniques avec des modems. Au moment où Unix se développait, le code ASCII était déjà bien établi (bien que le code EBCDIC concurrent d'IBM était encore une force à laquelle il fallait countr).

Les premiers terminaux conservaient un logging imprimé de chaque personnage reçu. Tant que les caractères ne sont pas arrivés plus rapidement que la tête d'printing ne peut les taper, au less. Mais dès que des terminaux à base CRT étaient possibles, le problème était que 25 lignes suffisaient pour le CRT et que 25 lignes de 80 caractères représentaient suffisamment de RAM pour que personne ne songeait sérieusement à fournir plus de RAM aux personnages qui avaient défilé l'écran.

Donc, une certaine convention était nécessaire pour signaler que la fin de l'envoi devrait faire une pause pour laisser le lecteur rattraper.

Le code ASCII 7 bits comporte 33 points de code consacrés aux caractères de contrôle (0 à 31 et 127). Certains d'entre eux avaient des objectives très bien établis, tels que NUL (leader de la bande de papier vierge pour le filetage, les vides et les épissures), DEL (caractères "barrés" sur la bande de papier indiquée en perforant les sept trous) CR , LF et TAB . Mais quatre ont été définis explicitement pour contrôler le terminal lui-même ( DC1 à DC4 alias Ctrl + Q, Ctrl + R, Ctrl + S et Ctrl + T).

Ma meilleure supposition est que certains ingénieurs pensaient que «S» pour «Stop» et «Q» pour «Continuer» n'étaient pas trop mauvais et que DC3 signifiait «s'il vous plaît arrêtez d'envoyer» et DC1 signifie "ok, continuez à envoyer maintenant".

Même cette convention était déjà bien établie au moment où Unix quittait le nid des Bell Labs pour sortir dans le monde.

La convention est connue sous le nom de contrôle de stream logiciel, et est très commune dans les dispositifs sériels réels. Il n'est pas facile à implémenter correctement, car il empêche l'utilisation de l'un ou l'autre de ces caractères à d'autres fins dans le canal de communication, et le signal d'arrêt doit être traité avant les caractères reçus en attente pour éviter d'envoyer plus que le destinataire manipuler.

Si possible, l'utilisation de signaux supplémentaires hors bande à partir du stream de données série pour le contrôle de stream est largement préférée. Sur les connections directement câblées qui peuvent fournir les fils de signal supplémentaires, vous findez le handshake matériel utilisé, qui libère ces caractères pour d'autres utilisations.

Bien sûr, la window de terminal d'aujourd'hui n'utilise pas de port série physique, possède des barres de défilement et n'a pas vraiment besoin d'un protocole de transfert de logiciel. Mais la convention persiste.

Je me souviens de l'affirmation selon laquelle Richard Stallman aurait reçu des plaintes concernant sa mise en correspondance Ctrl + S à la search incrémentale dans les premières versions d'emacs et qu'il était plutôt antipathique envers un user qui devait dépendre d'une connection 7 bits contrôlée par un stream logiciel.