Come risolvere il problema che una schermata del Terminale è incasinata? (di solito dopo un ridimensionamento)


76

A volte, una schermata del terminale è incasinata e quando usiamo man lsper leggere le manpage o premere la freccia SU per andare ai comandi precedenti nella cronologia, la schermata mostrerà i caratteri non come il posto giusto. (ad esempio, considera la fine dello schermo come una parte al centro dello schermo).

Il comando resetè stato provato e non funzionerebbe. Un modo che funziona è disconnettersi o chiudere la finestra e ridimensionare prima la finestra, quindi fare ssh(o chiudere quella scheda e ridimensionare la finestra, quindi aprire una nuova scheda per ottenere una nuova shell).

Ma in questo modo, perderemo tutto ciò che abbiamo fatto in precedenza, come l'avvio di una console di macchina virtuale, ecc. Quindi, se non chiudiamo la shell, c'è un modo per risolvere questo problema?

(questo è successo prima all'interno di Fedora, e anche per un Macbook sshin una scatola RHEL 5.4).

Aggiornamento: Ricordo ora come è successo in Fedora: ho aperto un Terminale e ho fatto un FreeVM per usare una console di una Macchina Virtuale (una shell). Penso che fosse di dimensioni 80 x 25 e poi dopo un po ', ho ridimensionato il Terminale a 130 x 50 circa, e quindi la "shell interna" (della VM) ha iniziato a comportarsi in modo strano).


Quale emulatore di terminale stai usando? Sembra rotto se resetnon risolve il problema.
Giordania,

qualunque sia il programma Terminale all'interno di Fedora ... e il programma Terminale predefinito su Mac OS X Lion.
nopole il

Vedi l'aggiornamento sopra per come è successo a Fedora
nopole il

3
L'incantesimo magico è ^Jreset^J, dove ^Jsignifica premere ctrl-J. Oppure (su terminali grafici) puoi provare il Resetpulsante. Inoltre, alcuni programmi non sono preparati per le dimensioni dei terminali che cambiano sotto di loro (sì, il software antico è vivo e vegeto) o si comportano male quando il terminale diventa troppo piccolo.
vonbrand,

1
I miei problemi derivavano da bash che calcolava erroneamente la lunghezza del prompt perché conteneva codici colore; Mi mancavano i caratteri di escape \ [e \] - vedi unix.stackexchange.com/questions/105958/…
qneill

Risposte:


93

Se stai usando bash, controlla se l'opzione "checkwinsize" è attivata nella tua sessione usando

shopt | grep checkwinsize

Se non capisci

checkwinsize    on

quindi attivalo con

shopt -s checkwinsize

La documentazione di Bash dice per l'attributo "checkwinsize":

"Se impostato, Bash controlla le dimensioni della finestra dopo ogni comando e, se necessario, aggiorna i valori di LINEE e COLONNE."

Se ti piace l'impostazione, potresti attivarla checkwinsizenel tuo ~/.bashrc.

  • Attivare: shopt -s checkwinsize
  • Per disattivare: shopt -u checkwinsize

6
Questo non succede per risolvere il mio problema, ma questa è una buona risposta generale, quindi +1 comunque. Penso che il mio problema si riferisca all'emulazione di Windows (?) Quando si inserisce un server Linux.
geneorama

All'inizio sembrava non funzionare quando ho usato le frecce verso l'alto per vedere la storia, ma subito dopo il primo comando eseguito ha risolto tutto. Utilizzando terminator nel mio caso. Grazie +1
kstenger,

questo ha funzionato per me, ma solo disattivando checkwinsize. per qualche motivo LINES = 24 è stato impostato dopo ogni comando anche se la mia finestra (contenente una sessione picocom) era molto più alta.
Michael,

19

Puoi provare Ctrl+ L. Cancella e / o ridisegna lo schermo del terminale, a seconda del programma.


3
ma non risolve definitivamente il problema ...
nopole

Penso che volevo dire che, se premi CTRL L, la linea è ok per il momento, ma se la modifichi di nuovo (o sulla riga di comando successiva che digiti), il problema è ancora lì
nopole

11

l'aggiunta di queste opzioni al docker exec sembrava risolvere il mio problema

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM

1
sei stato tu a fare la domanda 5 anni fa?
Archemar,

3
Posso dirti che non lo è: "docker" non si adatta davvero a "5 anni fa". Docker non è stato ancora rilasciato a gennaio 2013 ;-)
jplandrain il

8

Ho avuto lo stesso problema e nessuna delle ricette precedenti ha funzionato per me perché credo che il mio bash non riceva mai i SIGWINCHsegnali, che sono intrappolati dal suo processo genitore.

Finalmente ho trovato una soluzione. Ho aggiunto al mio .bashrc:

export PROMPT_COMMAND="resize &>/dev/null ; $PROMPT_COMMAND"

Ora ogni volta che ricevo un nuovo prompt, la mia finestra viene riadattata.

Grazie a UKmonkey per il miglioramento PROMPT_COMMAND.


2
Personalmente andrei con me in export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"modo che il vecchio comando rapido, qualunque sia il mio essere, sarà preservato
UKMonkey,

Vorrei solo eseguire il ridimensionamento manualmente quando necessario. L'interrogazione della console per dimensioni può essere lenta. Eseguendolo ogni comando sembra eccessivo e di solito sai quando è stato ridimensionato.
Conrad Meyer,

6

Volevo solo aggiungere ciò che Arcadien aveva già menzionato. L'abilitazione checkwinsize fa il trucco, ma per me, ciò che era necessario era ripristinare le dimensioni della finestra affinché funzionasse correttamente. Immagino che il checkwinsize avesse lo scopo di eliminare questo, ma comunque, vale la pena provare. Prova a cambiare la dimensione della finestra o a non massimizzare e massimizzarla dopo questa opzione.


1
Che ci crediate o no, questo è stato tutto quello che ci è voluto per riparare il mio. Divertente perché ho provato tutto il resto prima.
Taranaki,

4

Di volta in volta ho riscontrato lo stesso problema usando zsh su macOS. Una semplice invocazione del resetcomando imposta nuovamente il terminale a mio piacimento.


Quindi l'OP ha detto che resetnon funzionava per loro, e questo era in effetti il ​​punto della domanda ....
Stephen Rauch

OP ha menzionato che non funziona su versioni Linux. Ho affrontato il problema su MacOS Sierra e ho resetlavorato in questo caso. Ho aggiunto questa risposta per aiutare chiunque, che deve affrontare lo stesso problema su un MacOS e non è a conoscenza del resetcomando.
nonocut

resetfunziona su Windows Putty con Ubuntu 16.04!
musbach,

reset ha funzionato su Ubuntu 16.04 zsh
A.Wan

2

Ho avuto lo stesso problema con te e questo è quello che ho fatto:
ho una .profileconfigurazione nel mio utente, quindi è lì che faccio tutte le mie modifiche.

C'è un pacchetto chiamato xtermche è disponibile attraverso apt-getNon lo so yum. Ma ho fatto un'installazione locale dalla fonte in quanto non ho i privilegi di installazione. LINK: http://invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

Ho esportato il percorso nel mio profilo e lo ho invocato nello stesso posto

export PATH=$PATH:/the/path/you/want/to/install/to
resize

Quindi ora ogni volta che eseguo l'accesso, la dimensione del terminale viene impostata di conseguenza tramite il ridimensionamento.


1

Bene, questo è un problema comune e dovrebbe esserci una soluzione semplice.

Se altre misure come Ctrl + A Ctrl + L non funzionano, prova a utilizzare stty:

  1. Ctrl + T: apre una nuova scheda con una shell locale.
    Oppure: lasciare la schermata (Ctrl + AD per staccare) ed uscire dalla sessione SSH.
  2. stty -a | grep rows: Ottieni il numero di righe e colonne.
    Esempio:speed 38400 baud; rows 33; columns 133; line = 0;
  3. Torna alla scheda remota o accedi e ricollega la schermata. L' sttyoutput dovrebbe essere diverso.
    Esempio:speed 38400 baud; rows 47; columns 177; line = 0;
  4. Digita stty rows Ne stty columns Ndove N è il numero "reale" (al di fuori dello schermo). Esempio:$ stty rows 33; stty columns 133

Se si utilizza Terminator , è possibile saltare i primi tre passaggi perché mostra il numero di colonne e righe nella parte superiore.

Non è necessario ridimensionare le finestre del terminale per eseguire questa operazione. Gli amministratori di solito accedono da computer diversi e quando i monitor collegati differiscono per dimensioni (risoluzione), una finestra ingrandita avrà dimensioni diverse su ciascun computer. In realtà è piuttosto difficile non imbattersi in questo frequentemente.

E il risultato non è solo che alcune pagine man non vengono visualizzate correttamente. È praticamente tutto ciò che utilizza un cercapersone: spesso mancano le prime righe (ad esempio). E non pensare nemmeno di usare VIM in un terminale così disallineato. Si desidera evidenziare la riga 3 (V) per sostituirla, ma quando lo si fa, il testo evidenziato è quello di un'altra riga.


CentOS non sembra avere un ridimensionamento - usa "righe stty 66" per fare il trucco.
Russ,

0

Prova stty sane. dovrebbe fare quello che ti serve.

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.