新しいUbuntu 16.04とDebian 8サーバーを実行します。 ssh経由で接続しようとすると、次の奇妙な端末出力が表示されます。数字の入った長方形を参照します。
言語設定の問題は、エンコードの問題が原因であると想定していたため、私が今述べた問題を解決しようとして自分で導入したものです。 3時間のデバッグの後、あなたの助けが必要です!
多分それはただ欠けているライブラリーですか?このようなグラフィカルな問題を探すのは大変です...
local@local:~$ ssh dummy@server
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Jul 9 17:22:43 2016 from x590c3909.dyn.telefonica.de
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
]1337;RemoteHost=dummy@server]1337;CurrentDir=/home/patrick]1337;ShellIntegrationVersion=2;Shell=bash]133;C;]133;D;0]1337;RemoteHost=dummy@server]1337;CurrentDir=/home/patrick]133;Adummy@server:~$ ]133;B
$ PS1出力のエコー:
echo $PS1
]133;C;\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
$ TERM出力をエコーします。
echo $TERM
]133;C;xterm
編集:「ロケール」-警告は この答え によって修正されました。
"[them]内の数字を含む長方形"は、ターミナルエミュレータがシーケンスを認識しないため、ターミナル制御シーケンスを表示する方法です。具体的には:
次の7ビットエイリアスの1つであるCSI制御文字(U + 009B)の代わりに、非常に一般的なESC [
を知っていると思います。 OSC制御文字には、7ビットのエイリアスとしてESC ]
があります。
]
が表示され、ESC文字の後に]
文字が続くものとして扱われます。そしてそれはそれが印刷しているものです。00
と1B
が表示されます。U+ 001Bの場合は、ESC文字のコードポイントです。]
を印刷します。いくつかの端末エミュレータは、OSCを制御文字シーケンスイントロデューサとして認識します。それにも標準のフォームがあります。 ECMA-48§5.6は、OSCで始まり、STで終了する「制御文字列」を定義しています(U + 009C、String Terminator)。inとは何ですか?制御文字列は端末タイプ固有です。例:そのdocoから、フォントとウィンドウタイトルを設定するために、xtermがそのような制御文字列を実装していることがわかります。
ただし、この場合の制御シーケンスのformは、xtermのものではありません。むしろ
␛] 1337; CurrentDir =/home /patrick␇
これは、iTerm2が理解できるOSC制御シーケンスの形式です。 iTerm2は、OSCによって導入された一連の制御シーケンスを定義します。これは、明らかに非標準であり、iTerm2に固有のものです。それらはECMA-48制御文字列仕様に準拠していませんが、標準で述べられているように、STではなくBEL(U + 0007)で制御文字列を終了します。厳密に言うと、コントロールの内容ではSOSおよびST以外の文字が許可されているため、これはこれまで終了しないのコントロール文字列です。ストリング;また、端末はそれ以降のすべての出力を制御文字列として単純に取得するため、準拠した端末エミュレータを使用すると、表示が実質的に停止します。
(Linuxカーネルに組み込まれているターミナルエミュレーターも、標準のOSC制御文字列を実装していません。xtermdocoは、非準拠のLinuxカーネルターミナルエミュレーターまたはiTerm2フォームを使用する壊れたアプリケーションをサポートするための仕組みがあることを指摘しています。フォームここに間違いなくiTerm2がありますが、Linuxカーネルターミナルエミュレータのものではありません。)
MacintoshからiTerm2を使用している場合、SSH接続の反対側にあるものは何でも、iTerm2制御シーケンスをターミナルエミュレータに静かに送信して、シェルが何であるか、作業ディレクトリが何であるか、誰であるか、いつだかを伝えますシェルプロンプトで編集を開始したり、コマンドの実行を開始したりしたときなど。
リモートシステムでは、/端末タイプがハードワイヤードされています。常にiTerm2と通信しているという前提の下で動作させました。しかし、あなたはnowUbuntu上で実行されているターミネータ、differentdifferent制御シーケンスのセット。
実際、出力は次のように伝えています。
␛] 1337; ShellIntegrationVersion = 2; Shell =bash␇
リモートシステムにBourne Again ShellのiTerm2 "Shell Integration"をインストールしました。それを見ると、iTerm2が実際に通信している端末であることを確認するのはかなり悪いことです。
だからそれを無効にする/アンインストールします。
console_codes
。 Linuxマニュアルページ。 §4. 2015。ssh
コマンドの前に別のLC_ALL
を付けてみてください。
LC_ALL=C ssh dummy@server