it-swarm-eu.dev

Backspace, karta nefunguje v terminálu (pomocí ssh)

Když se s mým účtem vrhnu do jiného počítače s Debianem (s oprávněním Sudo), můj klávesa backspace vygeneruje po stisknutí nějaké trapné symboly. Taky Tab & del klávesy také nefungují.

Na druhé straně mám také stejný účet na stejném stroji a když jsem ssh prostřednictvím tohoto účtu, jeho terminál funguje naprosto v pořádku. Nemohl jsem přijít na to, proč se to děje.

42
gopi1410

Takové problémy jsem už viděl.

Vezměte například backspace, vzdálený hostitel očekává, že nějaký znak bude použit jako „vymazat/backspace“, zatímco stisknete backspace v terminálu, terminálový program pošle vzdálenému hostiteli nějaký znak, pokud se to, co vzdálený hostitel očekává, liší znaky odeslané terminálovým programem, narazíte na tento problém. Rychlá oprava je tedy níže:

  1. spusťte příkaz #stty -a ve vzdáleném hostiteli a najděte, co se očekává, že bude ve výstupu vymazán kód. Řekněte erase=^?.
  2. V terminálu zadejte Ctrlv a stiskněte zadní prostor. Uvidíte, jaký kód je odeslán jako „vymazat“. Řekněme, že to je ^H.
  3. Ve vzdáleném hostiteli spusťte #stty erase ^H.
    (Poznámka: použití Ctrlv + Backspace, nezadávejte ^ ručně)

Problém Tab můžete vyřešit stejným způsobem jako výše.

40
Derui Si

Kromě řešení „stty“ můžete vyzkoušet také řešení „TERM“.

Ssh na váš Debian z nějakého terminálu (PuTTY, solaris dterm, debain xterm, you-name-it), tento termninal oznamuje schopnosti (které zahrnují klíče jako Backspace a Tab) prostřednictvím proměnné prostředí TERM.

Takže po ssh na unix Host (to nezávisí na Debian it nebo jiném Host) nastavte proměnnou TERM podle vašeho terminálu. Zvažte, že používáte bash jako Shell a vt100 jako terminál:

export TERM=vt100

ps: TERM by měl být oznámen pomocí ssh automaticky, ale za určitých okolností tato magie selže.

40
paul

Je to proto, že vaše výchozí prostředí Shell je sh, pro použití bash stačí spustit z prostředí Shell bash.

bash

Jak nastavit bash jako výchozí Shell:

chsh -s /bin/bash 

nebo

Sudo chsh -s /bin/bash yourusername
17
iceflame

Vaše prostředí může být nastaveno na /bin/sh namísto /bin/bash

7
jm.

Obvykle to používám k opravě jakéhokoli funky znakového výstupu v mém terminálu. Obnoví výchozí hodnoty všech speciálních znaků.

stty sane

Ze stránky stty man:

stejné jako 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 iexten echo echlsh -xcase -tostop -echoprt echoctl echoke, všechny speciální znaky k jejich výchozím hodnotám

7
David Morales

kromě paulovy odpovědi, pokud si chcete zachovat schopnost mít barevný výstup, můžete použít xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
2
beenotung
# stty -a
speed 38400 baud; rows 34; columns 134; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = 
<undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff - 
iuclc -ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl 
echoke

Můj domovský klíč vytiskne ^ [[1 ~, podle řešení @ Derui Si můj backspace klíč funguje dobře, nejsem si jistý, co dělat pro domácí klíč.

1
Aditya

Zkuste tento příkaz

stty sane

Myslím, že vaše nastavení terminálu bylo poškozeno, tento příkaz resetuje vše na výchozí.

0
Aravind Ekan