Freebsd

讓 PuTTY 與 FreeBSD 一起正常工作

  • June 8, 2019

我將 FreeBSD 11 與 PuTTY 一​​起用於 SSH。鍵盤的鍵碼似乎根本沒有正確設置 - 例如,它在向上箭頭上發出嗶嗶聲,並為大多數導航鍵插入“~”,包括箭頭和刪除鍵等基本功能。鍵盤是標準的英國英語鍵盤。打字真的很痛苦。

我已經閱讀了許多關於在 rc 和 shell 中設置關鍵程式碼的主題,所以我知道我可以將其設置為最後的手段。

但是對於具有如此多可配置性的客戶端和具有如此廣泛用途的作業系統而言,如果沒有一些他們都“只是理解”的共同終端選項/設置,我可以在兩者上進行設置,這將是非常奇怪的 - 瞧鍵全部(或大部分)工作。問題是我不知道如何找到它,當我找到它時,如何為所有未來的會話設置它。

我了解如何找到終端發送的單個鍵的鍵碼,因此我可以這樣設置我的鍵,一個接一個。但是我想為我的 shell rc 和 PuTTY 找到基本的終端設置,這樣可以獲得盡可能多的鍵,所以如果我需要它們,我只需要設置一些例外。

我怎樣才能做到這一點?

有很多旋鈕可以轉動。而網上的很多建議,人們都盲目聽從。與往常一樣前往羅馬的方式很多,但是當您知道事物之間的聯繫時,它們就非常簡單了。

超簡短的答案是:

將 Putty 中的終端字元串從更改xtermputty(在 Connection -> Data -> Terminal-type string 下)。

要避免的典型陷阱:

確保您沒有TERM在 rc 文件中的其他位置進行設置。

稍長的答案:

首先,我將首先確保您實際使用的是預設值。我使用 DK 鍵盤(和映射)從我的個人 Windows 10 筆記型電腦連接到帶有 DK 映射的 FreeBSD 11.1 設置。在我的情況下,箭頭鍵在命令行上按預期工作。在目前行上左/右移動。Up/Down 遍歷命令歷史記錄。

我已經為 /bin/sh(預設使用者 shell)和 /bin/tcsh(預設 root shell)驗證了這一點。你可以閱讀shells

您寫道,您知道如何在 shell 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

但是,與其為每個會話和每個 shell 在本地設置這些綁定,不如為此目的使用termcap / terminfo (稍後會詳細介紹)。

在這種情況下,膩子是您的終端

Putty 的預設設置是將會話的 TERM 設置為“xterm”。這樣做是因為它合理地兼容 xterm。xterm不是對任何終端的引用,而是對程序Xterm的引用。

膩子配置

Connection -> Data -> Terminal-type string: `xterm`

登錄後,您可以驗證此設置是否適用於您的會話:

echo $TERM
xterm

如果 $TERM 與您在 Putty 中設置的不匹配,那麼您可能在 rc 文件中設置了覆蓋。注意/bin/shin的警告~/.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 VT100了,xterm所以你會在很多地方看到。

即使您只是保持TERM原樣,xterm您將使用預設的 Putty 和 FreeBSD 獲得顏色輸出ls -G

有些人會建議您設置TERMxterm-colorxterm-256rxvt-256color獲得“適當的”顏色支持。

*但請記住:*所有這些神奇TERM的值都只是數據庫中的映射。今天如此普遍的一個原因xterm是某些程序和腳本檢查是否$TERM以開頭xterm(這是一個可怕的想法)。

然後,這將我們帶回到FreeBSD 上的預設值termcap 。如果你想使用 terminfo 那麼你需要安裝devel/ncurses。有關這方面的更多資訊,請參閱:如何在 FreeBSD 上使用 terminfo 條目?

您可以在文本文件中找到 termcap 數據庫的來源 /usr/share/misc/termcap。如果您對此文件進行更改,則需要執行cap_mkdb以使系統確認更改。在這裡,您將找到難題的答案。Putty有一個明確的TERM設置,名為:putty

FreeBSD 然後選擇不更改設置xterm以匹配 Putty 的行為(可能是出於可戰鬥性的考慮)。但他們已經足夠好為 Putty 提供設置了。

因此,如果您將 Putty 的預設設置更改為Terminal-type string:from xtermputty那麼這會在您登錄時反映出來TERM。預設的 FreeBSD termcap 有一個條目。

並且通過魔術並且無需觸摸大量 rc 文件,您現在可以使用箭頭鍵(我也使用 xterm),而且 Home/End 移動到行首/行尾和 Del(ete) 刪除。

獎金:

似乎預設的膩子定義不支持所有 256 種顏色。然後,您可以修改您的 termcap 並添加這兩行(並執行 cap_mkdb):

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

然後你可以將你的設置TERMputty-256color. Scott Robison建議應該添加這個 - 但是 FreeBSD 沒有接受這個變化。我再也無法在數據庫中找到此 PR。

獎金2:

如果您喜歡保持TERM原樣,xterm那麼您應該花時間配置 Putty 以匹配 FreeBSD 對 xterm 終端的期望。

如果您在設置Home 和 End 鍵中轉到設置終端 -> 鍵盤,您可以將“標準”更改為“rxvt”。

通過此更改,您會注意到 Home 鍵在命令行上起作用(移動到行首)。但是 End 現在什麼都不做。

所以接下來的問題是讓 Putty 同意 FreeBSD 對 xterm 的期望。只是為了表明你也可以反過來。

引用自:https://unix.stackexchange.com/questions/397000