バックスペース、タブが端末で機能しない(sshを使用)


37

私のアカウント(sudoパーミッション)でDebianを使用して別のマシンにsshすると、バックスペースキーを押すといくつかの厄介な記号が生成されます。また、Tabdelキーも機能しません。

一方、同じマシン上に別のアカウントもあります。このアカウントを使用してsshを実行すると、端末は完全に正常に動作します。なぜこれが起こっているのか分かりませんでした。

回答:


37

私は前にそのような問題を見たことがあります。

バックスペースを例にとると、リモートホストは、ある文字が "erase / backspace"として使用されることを期待します。ターミナルでbackspaceを押すと、ターミナルプログラムは、リモートホストがdiff端末プログラムから送信された文字を使用すると、この問題が発生します。したがって、簡単な修正は次のとおりです。

  1. #stty -aリモートホストでコマンドを実行し、出力で消去コードになると予想されるものを見つけます。と言うerase=^?
  2. ターミナルで、Ctrlvバックスペースを入力して押します。「消去」として送信されるコードが表示されます。そうです^H
  3. リモートホストで、を実行し#stty erase ^Hます。
    (注:Ctrlv+を使用しBackspace、^を手動で入力しないでください)

上記と同じ方法でタブの問題を修正できます。


私のバックスペースキャラクターは、逆三角形のような特別なシンボルです。そのため、動作していません
-gopi1410

1
この単純なコメントは、確かに私がこれまで見てきた最善の解決策です。それは手品のように感じるが、それは動作します。
パウロ・マトス

これは私のために働いた!私が理解していないのは、シェルが期待どおりにバックスペースを処理する理由ですが、私のアプリの標準入力から読み取ることはできません。提案された変更を行うと、両方のバックスペースが機能します。私の理解では、シェルは標準入力のバッファリングを処理するので、バックスペース処理はシェルとアプリの両方で同じではないでしょうか?
サミュエル

1
コードがまったく送信されない場合はどうなりますか?Ctrlv +バックスペースは何も生成しません...-
マンフレード

私にとって、バックスペースコードはstty -a出力と同じですが、それでも動作しません
Matej J

36

「stty」ソリューションのほかに、「TERM」ソリューションを試すこともできます。

ターミナル(putty、solaris dterm、debain xterm、you-name-it)からDebianにsshし、この端末アナウンス機能(BackspaceやTabなどのキーを含む)をTERM環境変数経由で送信します。

したがって、Unixホストへのsshの後(debian itまたは他のホストに依存しません)、端末に応じてTERM変数を設定します。bashをシェルとして、vt100をターミナルとして使用していると考えてください。

export TERM=vt100

ps:TERMはsshを介して自動的にアナウンスされるべきですが、状況によってはこのマジックが失敗します。


それでも動作しません:(
gopi1410

どの端末を使用していますか?そして、あなたが試したTERMの価値は何ですか?
ポール

vt100を試しました。TERMの価値を知るにはどうすればよいですか?cygwin(Windows)からDebianにsshを試しました。cygwinに問題がある場合は、ubuntuターミナルからも試してみましたが、同じ問題です。
gopi1410

私の知る限り、cygwinに適切なターミナルエミュレーションがあるかどうかはわかりませんが、cygwinはターミナルエミュレーションのない通常のWindowsコンソールを使用しています(間違っている可能性があります)。Ubuntuからはすべて正常に動作するはずです。Debianのシェルまたはtermcapライブラリに問題があります。Ubuntuからログインし、コマンドの出力を表示します。1. echo $ TERM 2. stty -a
paul

2
これは直接助けにはなりませんでしたが、TERMが正しく設定されていたため、問題の特定に役立ちました。端末のterminfoエントリがありませんでした。私はurxvtを使用していますが、この特定の問題を修正するにはrxvt-unicode-terminfoをインストールする必要があります
Xandaros

15

これは、デフォルトのシェルがsh、使用するためにbashbashシェルから実行されるためです。

bash

bashデフォルトのシェルとして設定するには:

chsh -s /bin/bash 

または

sudo chsh -s /bin/bash yourusername

2
これは私のためにそれを修正しました。私のログインシェルを見ても、決して!
ジェームズパック

2
この問題が発生していますが、シェルはbashです。
フラクチャー

6

あなたのシェル/bin/sh/bin/bash




これは、もう少し説明し、それを変更する方法を説明していればもっと役立つでしょうが、それは私が抱えていた問題でした。この問題を解決してくれたリンクを@Tomに感謝します。
ジェイク

私の場合、これがその特定のユーザーの理由でした。/etc/passwd:/bin/bashが彼のラインにそれを追加したとき、シェルは定義されていませんでした。使用されているシェルを確認できますecho $0
MSpreij

6

私は通常、これを使用して、端末のファンキーな文字出力を修正します。すべての特殊文字をデフォルト値にリセットします。

stty sane

sttyのmanページから:

creadと同じ-xcase -tostop -echoprt echoctl echoke、すべての特殊文字をデフォルト値に


2

paulの答えに加えて、カラフルな出力を保持したい場合は、xterm-88colorを使用できます

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

1
toe -aサポートされている端末タイプのリストを示しています... xterm-88colorこれは唯一のオプションではなく、特定のシステムでは実際に利用できない場合があります。
0xC0000022L
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.