it-swarm.it

Come sbloccare dopo aver premuto Ctrl-S in un terminale?

È una situazione che mi è successa abbastanza spesso: dopo aver premuto (con una diversa intenzione) Ctrl-S in un terminale, l'interazione (input o output) con esso viene congelata. Probabilmente è una specie di "blocco scorrimento" o altro.

Come posso sbloccare il terminale dopo questo?

(Questa volta, ho lavorato con apt-Shell inside a bash inside urxvt-- non sono sicuro di chi sia responsabile della gestione speciale di Ctrl-S: Stavo cercando la cronologia dei comandi al contrario C-r, come al solito per readline, ma poi ho voluto tornare indietro nella storia con il solito - almeno in Emacs -C-s ( 1 , 2 , ), ma ciò ha causato il blocco del terminale. Bene, lo scorrimento/il paging per visualizzare le cose passate funziona ancora nel terminale, ma nessuna interazione con i processi viene eseguita lì.)

Ctrl-Q

Per disabilitarlo del tutto, mantieni stty -ixon in uno script di avvio. Per consentire a qualsiasi tasto di far fluire di nuovo le cose, usa stty ixany.

ps: Non è né il terminale né la Shell a farlo, ma il driver del terminale del sistema operativo.

924
ak2

Ctrl-Q è davvero la risposta. Ho pensato di aggiungere una piccola storia di questo che è troppo lungo per adattarsi ai margini di la risposta corretta di Ak2 .

Nei secoli bui, un terminale era una grande apparecchiatura che si collegava a un dispositivo remoto (originariamente un altro terminale perché i teletipi erano molto più facili da imparare a utilizzare di una chiave telegrafica) su un lungo filo o tramite linee telefoniche con modem. Al momento dello sviluppo di Unix, il ASCII era già ben consolidato (sebbene il codice EBCDIC concorrente di IBM fosse ancora una forza da non sottovalutare).

I primi terminali conservavano un registro stampato di ogni personaggio ricevuto. Finché i personaggi non sono arrivati ​​più velocemente di quanto la testina di stampa potesse scriverli, almeno. Ma non appena sono stati possibili terminali basati su CRT, è emerso il problema che solo circa 25 righe si adattavano al CRT e 25 righe di 80 caratteri rappresentavano abbastanza RAM che nessuno pensava seriamente di fornire more = RAM per i caratteri che erano scesi dalla parte superiore dello schermo.

Quindi era necessaria una convenzione per segnalare che l'estremità di invio doveva fermarsi per consentire al lettore di recuperare.

Il 7 bit ASCII ha 33 punti di codice dedicati ai caratteri di controllo (da 0 a 31 e 127). Alcuni di questi avevano scopi davvero ben definiti, come NUL (vuoto leader del nastro di carta per filettatura, spazi vuoti e giunzioni), DEL (caratteri "barrati" su nastro di carta indicato punzonando tutti e sette i fori), BEL (Ding!), CR, LF e TAB. Ma quattro sono stati definiti esplicitamente per il controllo del dispositivo terminale stesso (DC1 per DC4 aka Ctrl + Q, Ctrl + R, Ctrl + S e Ctrl + T).

La mia ipotesi migliore è che alcuni ingegneri pensassero che (come dicono gli mnemonici), "S" per "Stop" e "Q" per "Continua" non erano poi così male e assegnarono DC3 significa "per favore, smetti di inviare" e DC1 significa "ok, continua a inviare ora".

Perfino quella convenzione era già ben stabilita quando Unix stava lasciando il nido ai Bell Labs per uscire nel mondo.

La convenzione è nota come controllo del flusso del software ed è estremamente comune nei dispositivi seriali reali. Non è facile da implementare correttamente, in quanto impedisce l'uso di uno di questi caratteri per qualsiasi altro scopo nel canale di comunicazione e il segnale di Stop deve essere gestito prima di qualsiasi carattere in attesa di ricezione per evitare di inviare più di quanto la fine di ricezione possa maniglia.

Se pratico, l'uso di segnali aggiuntivi fuori banda dal flusso di dati seriali per il controllo del flusso è ampiamente preferito. Su connessioni cablate direttamente che possono permettersi i fili di segnale aggiuntivi, troverai l'uso dell'handshake hardware, che libera quei caratteri per altri usi.

Ovviamente, la finestra del terminale di oggi non utilizza una porta seriale fisica effettiva, ha barre di scorrimento e non ha davvero bisogno dell'handshaking del software. Ma la convenzione persiste.

Ricordo l'affermazione secondo cui Richard Stallman ha ricevuto lamentele sulla sua mappatura Ctrl + S per la ricerca incrementale nelle prime versioni di emacs e che era piuttosto antipatico per qualsiasi utente che dovesse dipendere da una connessione a flusso di software a 7 bit.

412
RBerteig