SSH用のPuTTYでFreeBSD11を使用しています。キーボードのキーコードが正しく設定されていないようです。たとえば、上矢印でビープ音を鳴らし、矢印や削除キーなどの基本を含むほとんどのナビゲーションキーに「〜」を挿入します。キーボードは標準的な英国英語キーボードです。タイピングは本当に苦痛です。
rcとshellの両方でキーコードを設定することについて多くのスレッドを読んだので、最後の手段としてそのように設定できることを知っています。
しかし、非常に多くの構成可能性を備えたクライアントと、非常に広く使用されているOSにとって、両方が「理解している」という共通の端末オプション/設定がなく、両方に設定できるのは非常に奇妙なことです。キーはすべて(またはほとんど)機能します。問題は、それを見つける方法がわからないことです。見つけた場合は、今後のすべてのセッションでどのように設定するかがわかりません。
個々のキーに対して端末から送信されるキーコードを見つける方法を理解しているので、キーを1つずつそのように設定できました。しかし、シェルrcとPuTTYの基本的な端末設定を見つけたいのですが、両方が理解できるようにできるだけ多くのキーを取得するので、必要な場合はいくつかの例外を設定するだけで済みます。
どうすればこれを行うことができますか?
承認された回答:
ひねったり回したりするノブはたくさんあります。そして、インターネットに関する多くのアドバイスは盲目的に続きます。いつものようにローマへの道はたくさんありますが、物事がどのようにつながっているかを知っていると、とても簡単です。
非常に短い答えは次のとおりです:
Puttyの端末文字列をxterm
から変更します putty
([接続]->[データ]->[端末タイプの文字列]の下)
避けるべき典型的な落とし穴:
TERM
を設定していないことを確認してください rcファイルの他の場所。
少し長い答え:
まず、実際にデフォルトを使用していることを確認することから始めます。 DKキーボード(およびマッピング)を使用する個人のWindows 10ラップトップから、DKマッピングを使用してFreeBSD11.1セットアップに接続します。私の場合、矢印キーはコマンドラインで期待どおりに機能します。左/右が現在の行を移動します。アップ/ダウンはコマンド履歴を通過します。
/ bin / sh(デフォルトのユーザーシェル)と/ bin / tcsh(デフォルトのルートシェル)の両方でこれを確認しました。シェルで読むことができます。
シェルrcファイルでキーマッピングを実行する方法を知っていると書きます。これを行う方法に関する多くの提案が浮かんでいます。しかし、それは通常あなたがすべきことではありません。
tcshキーバインディングについては次のような提案があります:
# Del(ete), Home and End
bindkey "\e[3~" delete-char
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
そして、bash(〜/ .inputrc)
に対するこのような提案"\x7F": backward-delete-char
"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
ただし、これらのバインディングをセッションごとおよびシェルごとにローカルに設定するのではなく、この目的のためにtermcap / terminfoを使用する必要があります(これについては後で詳しく説明します)。
この文脈では、パテはあなたの端末です。
Puttyのデフォルトでは、セッションのTERMを「xterm」に設定します。それは合理的にxtermと互換性があるのでそれをします。 xterm
は端末への参照ではなく、プログラムXtermへの参照です。
PuTTY構成
Connection -> Data -> Terminal-type string: `xterm`
ログインしたら、この設定がセッションに引き継がれることを確認できます:
echo $TERM
xterm
$ TERMがPuttyで設定したものと一致しない場合は、rcファイルにオーバーライドを設定している可能性があります。 /bin/sh
の警告に注意してください ~/.profile
内 :
# Setting TERM is normally done through /etc/ttys. Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# TERM=xterm; export TERM
物理的なDECVT100のxterm
をあまり使用しないためです。 多くの場所で目にするものです。
TERM
を保持しているだけでも xterm
として ls -G
としてデフォルトのPuttyとFreeBSDでカラー出力を取得します 動作します。
TERM
を設定することをお勧めする人もいます xterm-color
へ 、xterm-256
またはrxvt-256color
「適切な」カラーサポートを取得します。
ただし、覚えておいてください: これらすべての魔法のTERM
値はデータベース内の単なるマッピングです。理由xterm
今日非常に普及しているのは、一部のプログラムとスクリプトが$TERM
かどうかをチェックすることです。 xterm
で始まります (これは恐ろしい考えです。)
これにより、FreeBSDのデフォルトであるtermcapに戻ります。 terminfoを使用したい場合は、devel/ncursesをインストールする必要があります。詳細については、FreeBSDでterminfoエントリを使用するにはどうすればよいですか?
termcapデータベースのソースは、テキストファイル/usr/share/misc/termcap
にあります。 。このファイルに変更を加える場合は、cap_mkdb
を実行する必要があります システムに変更を確認させるため。ここであなたはあなたの難問への答えを見つけるでしょう。明示的なTERM
があります 名前付きパテの設定:putty
。
その後、FreeBSDは、xterm
の設定を変更しないことを選択しました。 パテの動作に一致させるため(おそらく戦闘性の懸念による)。しかし、彼らはパテのための設定を提供するのに十分素晴らしかったです。
したがって、Terminal-type string:
のPuttyのデフォルト設定を変更した場合 xterm
から putty
次に、これはTERM
に反映されます ログインすると、デフォルトのFreeBSDtermcapにこのエントリがあります。
そして、魔法によって、多くのrcファイルに触れることなく、矢印キーが機能するようになりました(xtermでも同様です)が、Home / Endは行の開始/終了に移動し、Del(ete)は削除します。
ボーナス:
デフォルトのパテ定義は256色すべてをサポートしているわけではないようです。次に、termcapを変更して、次の2行を追加できます(そしてcap_mkdbを実行します):
putty-256color:\
:pa#32767:Co#256:tc=putty:
次に、TERM
を設定できます putty-256color
へ 。スコット・ロビソンはこれを追加すべきだと提案しましたが、その変更はFreeBSDによって取り上げられていません。このPRはデータベースにもう見つかりません。
ボーナス2:
TERM
を保持したい場合 xterm
として 次に、FreeBSDがxtermターミナルに期待するものと一致するようにPuttyを構成するのに時間を費やす必要があります。
設定ターミナル->キーボードに移動した場合 設定でホームキーとエンドキー 「Standard」を「rxvt」に変更できます。
この変更により、ホームキーがコマンドラインで機能するようになります(行の先頭に移動します)。しかし、Endは今は何もしません。
したがって、FreeBSDがxtermに期待することにPuttyに同意させることが問題になります。逆に行くこともできることを示すためだけに。
関連:流入を適切に構成する方法は?