web-dev-qa-db-ja.com

PuTTYをFreeBSDで正しく動作させる

私はSSH用のPuTTYでFreeBSD11を使用しています。キーボードのキーコードが正しく設定されていないようです。たとえば、上矢印でビープ音が鳴り、矢印やDeleteキーなどの基本を含むほとんどのナビゲーションキーに「〜」が挿入されます。キーボードは、標準的な英国英語のキーボードです。タイピングは本当に苦痛です。

RcとShellの両方でキーコードの設定に関するスレッドをいくつか読んだので、最後の手段としてそのように設定できることを知っています。

しかし、非常に多くの構成可能性を備えたクライアントと、非常に広く使用されているOSにとって、両方が「理解している」だけの端末オプション/設定がないため、両方に設定できます。キーはすべて(またはほとんど)機能します。問題は、それを見つける方法がわからないことです。見つけた場合は、今後のすべてのセッションでどのように設定するかがわかりません。

個々のキーに対して端末から送信されるキーコードを見つける方法を理解しているので、キーを1つずつそのように設定できました。しかし、Shell rcとPuTTYの基本的な端末設定を見つけたいのですが、両方が理解できるようにできるだけ多くのキーを取得するので、必要な場合にいくつかの例外を設定するだけで済みます。

これどうやってするの?

1
Stilez

ひねったり回したりするノブはたくさんあります。そして、インターネットの人々に関する多くのアドバイスは盲目的に従います。いつものようにローマへの道はたくさんありますが、物事がどのようにつながっているかを知っていると、とても簡単です。

超短い答えは:

PuTTYの端末文字列をxtermからPuTTYに変更します([接続]-> [データ]-> [端末タイプの文字列]の下)。

避けるべき典型的な落とし穴:

Rcファイルの他の場所にTERMを設定していないことを確認してください。

少し長い答え:

まず、実際にデフォルトを使用していることを確認することから始めます。 DKキーボード(およびマッピング)を使用する個人のWindows 10ラップトップから、DKマッピングを使用してFreeBSD11.1セットアップに接続します。私の場合、矢印キーはコマンドラインで期待どおりに機能します。左/右が現在の行を移動します。アップ/ダウンはコマンド履歴を通過します。

/ bin/sh(デフォルトのユーザーシェル)と/ bin/tcsh(デフォルトのルートシェル)の両方でこれを確認しました。 shells で読むことができます。

Shellrcファイルでキーマッピングを実行する方法を知っていると書きます。これを行う方法に関する多くの提案が浮かんでいます。しかし、それは通常あなたがすべきことではありません。

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は ターミナル です。

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

物理的なものをあまり使用しないため、 DEC VT1 はもうxtermが多くの場所に表示されます。

TERMxtermとして保持している場合でも、ls -Gが機能するため、デフォルトのPuTTYおよびFreeBSDでカラー出力が得られます。

「適切な」カラーサポートを取得するには、TERMxterm-colorxterm-256、またはrxvt-256colorに設定することをお勧めする人もいます。

ただし、覚えておいてください:これらの魔法のTERM値はすべて、データベース内の単なるマッピングです。 xtermが今日非常に普及している理由は、一部のプログラムとスクリプトが$TERMxtermで始まるかどうかをチェックするためです(これは恐ろしい考えです)。

これにより、FreeBSDのデフォルトである termcap に戻ります。 terminfoを使用したい場合は、 devel/ncurses をインストールする必要があります。詳細については、以下を参照してください。 FreeBSDでterminfoエントリを使用するにはどうすればよいですか?

Termcapデータベースのソースは、テキストファイル/usr/share/misc/termcapにあります。このファイルに変更を加える場合は、cap_mkdbを実行して、システムに変更を確認させる必要があります。ここであなたはあなたの難問への答えを見つけるでしょう。 TERMという名前のPuTTYの明示的なPuTTY設定があります。

その後、FreeBSDは、PuTTYの動作に一致するようにxtermの設定を変更しないことを選択しました(おそらく戦闘性の懸念のため)。しかし、それらはPuTTYの設定を提供するのに十分なほど素晴らしかったです。

したがって、Terminal-type string:のPuTTYのデフォルト設定をxtermからPuTTYに変更すると、ログイン時にTERMに反映されます。デフォルトのFreeBSDtermcapこのためのエントリがあります。

そして、魔法によって、多くのrcファイルに触れることなく、矢印キーが機能するようになりました(xtermでも同様です)が、Home/Endが行の開始/終了に移動し、Del(ete)が削除します。

ボーナス:

デフォルトのPuTTY定義は、256色すべてをサポートしているわけではないようです。次に、termcapを変更して、次の2行を追加できます(そしてcap_mkdbを実行します)。

PuTTY-256color:\
        :pa#32767:Co#256:tc=PuTTY:

次に、TERMPuTTY-256colorに設定できます。 Scott Robison これを追加することを提案しました-しかし、変更はFreeBSDによって取り上げられていません。このPRはデータベースにもう見つかりません。

ボーナス2:

TERMxtermのままにしておきたい場合は、FreeBSDがxtermターミナルに期待するものと一致するようにPuTTYを構成することに時間を費やす必要があります。

設定ターミナル->キーボードの設定ホームキーと終了キーに移動すると、「標準」を「」に変更できます。 rxvt」。

この変更により、ホームキーがコマンドラインで機能するようになります(行の先頭に移動します)。しかし、Endは現在何もしません。

したがって、PuTTYにFreeBSDがxtermに期待するものに同意させることが問題になります。逆に移動できることを示すためだけに。

7
Claus Andersen