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.