Emulatore di terminale Hang Ctrl-s?


311

Mi sono imbattuto in una frase in vimdoc:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.

e questa chiave appende davvero il mio film. Stavo pensando che fosse colpa di Vim, dato che non ho avuto problemi con l'uso C-s/ C-x C-sin emacs nox. Tuttavia, proprio ora che stavo leggendo una manpage e ho premuto il tasto Ctrl-s, si blocca man anche (sto impostando lesscome PAGER).

Quindi qualcuno può dirmi cosa sta succedendo?

Gli emulatori di terminale sono xterme lxterminal, e ttyha anche questo problema. E un Ctrl+ qmette nuovamente il processo in tutti i casi.


6
Questa potrebbe essere una domanda stupida ma non hai menzionato quello che hai provato nella tua domanda. Hai provato C-qa riattivare lo scorrimento, giusto?
h3rrmiller,

3
@ h3rrmiller sì, esatto. Ma vorrei solo sapere perché ctrl-scausare il blocco del processo.
Hongxu Chen,

prima c'erano le tastiere con il tasto di blocco dello scorrimento C-sed C-qerano i vecchi "interruttore di blocco dello scorrimento". puoi disabilitare questa funzionalità aggiungendo stty ixanye stty ixoff -ixonal tuo.bashrc
h3rrmiller l'

2
Questa è un'ambientazione storica oggi stupida negli emulatori terminali; vedi questa domanda correlata su come riparare il tuo terminale.
Ingo Karkat,

1
@IngoKarkat Non direi che è stupido ... Lo uso ancora di tanto in tanto
h3rrmiller

Risposte:


361

Questa funzione è denominata Software Flow Control (controllo del flusso XON / XOFF)

Quando un'estremità del collegamento dati (in questo caso l'emulatore di terminale) non è in grado di ricevere altri dati (poiché il buffer è pieno o quasi pieno o l'utente invia C-s) invierà un "XOFF" per indicare la fine dell'invio del collegamento dati per mettere in pausa fino alla ricezione del segnale "XON".

Quello che sta succedendo sotto il cofano è che "XOFF" sta dicendo al driver TTY nel kernel di mettere il processo che sta inviando i dati in uno stato di sospensione (come mettere in pausa un film) fino a quando al driver TTY non viene inviato un "XON" per dire al kernel per riprendere il processo come se non fosse mai stato fermato in primo luogo.

C-sabilita il blocco scorrimento terminale. Ciò impedisce lo scorrimento del terminale (inviando un segnale "XOFF" per mettere in pausa l'output del software).

C-qdisabilita il blocco scorrimento. Ripresa dello scorrimento dei terminali (inviando un segnale "XON" per riprendere l'output del software).

Questa funzionalità è legacy (quando i terminali erano molto lenti e non consentivano lo scorrimento) ed è abilitata per impostazione predefinita.

Per disabilitare questa funzione è necessario quanto segue in ~/.bash_profileo ~/.bashrc:

stty -ixon

10
In realtà penso che risalga addirittura agli anni '70, se non agli anni '60.
Keith l'

Tuttavia sembra non funzionare su Ubuntu 16.04.
Robert,

3
"stty -ixon" <----- questa è una delle cose più importanti che ho letto su Internet nell'ultima settimana. grazie.
Brad P.

In realtà, la storia di questo inizia diversi decenni prima degli anni '80. Vedi il TTY demistificato .
RoboAlex

25

Alla fine della mia .bashrcsceneggiatura ho aggiunto:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.