Backspace, Tab non funzionante nel terminale (usando ssh)


37

Quando entro in un'altra macchina con Debian con il mio account (con permessi sudo), il mio tasto backspace genera alcuni simboli scomodi quando si preme. Inoltre Tab& deltasti non funzionano troppo.

D'altra parte, ho anche un altro account sulla stessa macchina e quando sfoglio questo account, il suo terminale funziona perfettamente. Non riuscivo a capire perché questo stesse accadendo.

Risposte:


37

Ho visto tali problemi prima.

Prendiamo ad esempio il backspace, l'host remoto si aspetta che un carattere venga utilizzato come "cancella / backspace", mentre si preme backspace nel terminale, il programma del terminale invierà qualche carattere all'host remoto, se ciò che l'host remoto prevede differisce i caratteri inviati dal programma terminale, riscontreresti questo problema. Quindi una soluzione rapida è la seguente:

  1. esegui il comando #stty -anell'host remoto e trova quello che dovrebbe essere un codice di cancellazione nell'output. Say erase=^?.
  2. Nel terminale, digitare Ctrlve premere il backspace. Vedrai quale codice viene inviato come "cancella". Di 'che lo è ^H.
  3. Nell'host remoto, eseguire #stty erase ^H.
    (Nota: utilizzare Ctrlv+ Backspace, non digitare ^ manualmente)

È possibile risolvere il problema con Tab con lo stesso di cui sopra.


Il mio personaggio backspace è un simbolo speciale simile a un triangolo invertito. Quindi non funziona
gopi1410

1
Questo semplice commento è sicuramente la migliore soluzione che abbia mai visto. Sembra un kludge ma funziona.
Paulo Matos,

Questo ha funzionato per me! Quello che non capisco però è perché la mia shell gestisce il backspace come previsto, ma la lettura da stdin nella mia app no. Fare la modifica suggerita porta a backspace a funzionare per entrambi. La mia comprensione è che la shell gestisce il buffering stdin, quindi la gestione del backspace non dovrebbe essere la stessa sia per la shell che per un'app?
Samuel,

1
Cosa succede se non viene inviato alcun codice? Ctrlv + backspace non produce nulla ...
Manfredo

Per me, il codice backspace è lo stesso stty -adell'output, ma non funziona ancora
Matej J

36

Oltre alla soluzione "stty", puoi provare la soluzione "TERM".

Ssh al tuo Debian da qualche terminale (putty, solaris dterm, debain xterm, you-name-it), questa funzionalità di annuncio finale (che include chiavi come Backspace e Tab) tramite la variabile di ambiente TERM.

Quindi, dopo ssh per unix host (non dipende da debian esso o altro host) impostare la variabile TERM in base al proprio terminale. Considera che stai usando bash come shell e vt100 come terminale:

export TERM=vt100

ps: TERM dovrebbe essere annunciato via ssh automagicamente, ma in alcune circostanze questa magia fallisce.


continua a non funzionare :(
gopi1410

Che terminale stai usando? E quale valore di TERM hai provato?
paul

Ho provato vt100. Come faccio a conoscere il valore di TERM? Ho provato ssh da cygwin (in windows) a Debian. Se ci sono problemi con Cygwin, l'ho anche provato dal terminale Ubuntu, ma lo stesso problema.
gopi1410,

Non sono sicuro che Cygwin abbia una buona emulazione terminale, per quanto ne so, Cygwin utilizza solo una normale console Windows che manca di emulazione terminale (potrebbe essere sbagliato). Da Ubuntu tutto dovrebbe funzionare bene. Qualcosa non va con la libreria shell o termcap su debian. Accedi da Ubuntu e dammi l'output dei comandi: 1. echo $ TERM 2. stty -a
paul

2
Sebbene ciò non mi abbia aiutato direttamente, poiché TERM è stato impostato correttamente, ha aiutato a identificare il problema. Mi mancavano le voci terminfo per il mio terminale. Sto usando urxvt e su arch devi installare rxvt-unicode-terminfo per risolvere questo particolare problema
Xandaros,

15

Questo perché la shell predefinita è sh, per usare bash, appena eseguita bashdalla shell.

bash

Per impostare bashcome shell predefinita:

chsh -s /bin/bash 

o

sudo chsh -s /bin/bash yourusername

2
Questo l'ha risolto per me. Non ho mai pensato alla mia shell di login!
James Pack,

2
Sto vedendo questo problema, ma la mia shell è bash.
Frattura del

6

La shell potrebbe essere impostata su /bin/shanziché/bin/bash


1
In relazione a questa risposta: unix.stackexchange.com/questions/50542/…
Samuel


Ciò sarebbe più utile se spiegasse un po 'di più e come cambiarlo, ma era il problema che avevo. Grazie @ Tom per il tuo link che ha risolto il problema per me.
Jake,

Questa è stata la ragione nel mio caso ... per quel particolare utente. Non è stata definita alcuna shell /etc/passwd, quando ho aggiunto :/bin/bashalla sua linea ha funzionato. Puoi scoprire con quale shell viene utilizzatoecho $0
MSpreij,

6

Di solito lo uso per correggere qualsiasi output di caratteri funky nel mio terminale. Reimposta tutti i caratteri speciali sui loro valori predefiniti.

stty sane

Dalla pagina man di stty:

come cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iextnech echo -xcase -tostop -echoprt echoctl echoke, tutti i caratteri speciali ai loro valori predefiniti


2

in cima alla risposta di Paul, se vuoi mantenere la capacità di avere un output colorato, puoi usare xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc

1
toe -amostra un elenco di tipi di terminali supportati ... non xterm-88colorè di gran lunga l'unica opzione e in effetti potrebbe non essere disponibile su determinati sistemi.
0xC0000022L
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.