web-dev-qa-db-ja.com

FreeBSDへのSSH(UTF-8)

Minttyを使用してWindowsマシンからFreeBSD-11.2-Releaseにsshしようとしていますが、LC_ALLをen_US.UTF-8に設定して非ASCII文字を入力/貼り付けしようとすると、接続が閉じられました。

私はCygwinを使用しており、QterminalとTerminatorも試しました。

FreeBSDには、11.2リリースバージョンのUTF-8文字に関する問題がありますか?それともこれはWindows固有のものですか(つまり、macOSまたはLinuxユーザーは問題ありません)。

注:FreeBSDマシンにウィンドウシステムをインストールしていません。

4
DannyNiu

LC_ALLの設定を主張していますが、正しく設定しているかどうかはわかりません。 The FreeBSD Handbook:22.2。ローカライズの使用

システムとシェル全体で一貫性が高いため、「シェルスタートアップファイルメソッド」(.profile)ではなく、「ログインクラスメソッド」(login.conf)を使用することを強くお勧めします。

次に、言語に関連する設定を変更したと言うと、2つのことを忘れがちです。

  1. /etc/login.conf(システム全体)または~/.login.conf(ユーザー)のいずれかを変更する場合、 cap_mkdb を実行して影響を与える必要があります!
  2. そしてテストするときは、新しいセッションを開始することを忘れないでください!

最初に、localeコマンドを実行して設定を確認します。 Vanilla FreeBSDシステムでは、次のように表示されます。

$ locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

これらの設定では、最も一般的な端末でUnicodeの問題が発生します。 PuTTYを使用していますが、次のテストを端末に貼り付けることができません。

ÆØÅ жз ઑ ᱵ

これは、FreeBSDのデフォルト設定がユニコードを使用しないためです。この回答は11.2に対してテストされましたが、13以降のデフォルトでは "C.UTF8"になり、変更は必要ありません。ただし、バニラのインストールでは、ユーザーが「ロシア語」を使用するように設定することで、非常に簡単に確認できます。その理由は、ロシア語がそのまま(/etc/login.confで)定義されている唯一の言語であり、Unicodeを使用しているためです。

pw usermod johndoe -L russian

次に、「johndoe」アカウントを使用してnewセッションにログインします(ユーザーの名前が何であれ)。これで、ユニコード(上記のテストから)をシェルに貼り付けることができます。 localeを使用して、設定がどのように取得されたかを確認します

$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_ALL=

基本的なユニコードが実際に動作することを確認したので、好みに合わせて設定を開始できます。私はデンマーク人なので、次の簡単な手順を実行します。

1.言語設定を追加する

必要な各言語について、/etc/login.confにセクションを追加します

danish|Danish Users Accounts:\
        :charset=UTF-8:\
        :lang=da_DK.UTF-8:\
        :tc=default:

2.データベースを更新する

ソースのlogin.confを編集するたびに、データベースを更新する必要があります。

cap_mkdb /etc/login.conf

3.ユーザー言語を設定する

私は通常、pwを使用してユーザーを管理しています。ユーザーを作成または変更するときに、言語を指定する必要があるだけです。

pw useradd janedoe -L danish

TIP:私の個人的な好みは、システム全体の「デフォルト」を変更せず、デフォルトのままにすることです。次に、「postgres」などのシステムアカウントの言語を設定します。言語設定でカバーされていないシステムアカウントに必要な非常に具体的な設定がある場合は、/etc/login.confにそのアカウント用の個別の「言語」(ログインクラス)を作成します。これにより、物事がすっきりと整理されます。

ヒント2:上記は、ユーザーごとにクラスを設定する方法を示しています。システム全体の変更が必要な場合は、canlogin.confの「デフォルト」クラスを変更できます。

PuTTY TIP:端末も当然UTF-8対応である必要があります。 PuTTYでは、これは設定にあります:ウィンドウ⮕翻訳。私は「UTF-8」に設定しています。 CJK領域にいる場合は、「CJKのあいまいな文字をワイドとして扱う」をチェックすることをお勧めします。そして、キリル文字のユーザーは通常「Caps Lockがキリル文字のスイッチとして機能する」ことを好みます。

7
Claus Andersen