16.04サーバーのロケールを永久に変更することはできません


9

新しいUbuntu 16.04サーバーをセットアップしましたが、ロケール設定を永続的に変更しようとすると、失敗してPOSIXロケールに戻ります。

入力localeすると、次のようになります。

LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

私の知る限りでは、POSIXは「フォールバック、ASCIIエンコーディング、Cと同じ」とドキュメントに記載されているため、これはロケールがまったく設定されていないことを意味します。

ロケールde_AT.utf8en_US.utf8システムに存在していたことを確認するために、私はを実行locale -aしました。

C
C.UTF-8
POSIX
de_AT.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8

矛盾に注意してくださいC.UTF-8、しかしde_AT.utf8さらに気になるのは、POSIXが3番目のエントリであるのに対し、別の機能しているシステムでは、リストの最後にあることです。

私の言語をに変更するためにen_US.utf8、入力しましたsudo update-locale LANG=en_US.utf8localeコマンドはまだPOSIXロケールを示しました。ログアウトして新しいログインをした後localeも、POSIXロケールが表示されました。再起動後localeも、POSIXロケールが表示されます。

ただし、と入力するexport LANG=en_US.utf8と一時的に機能しますが、ログアウトするまでしか機能しません。そのため、ロケールが正しく生成されたことはかなり確実です。

アイデアが足りません。すべてのロケールを再生成してみました/etc/default/localeが、単に無視されているように見えます。

完成させるために/etc/default/locale、行だけが含まれていますLANG=en_US.utf8

UPDATE://私が実行してみましたsudo localectl set-locale LANG=en_US.UTF-8、そしてlocalectlまたそれがロケールを設定することを私に示したが、再起動後も、localeまだPOSIXを示し、非ASCII文字がまだ正しくレンダリングされません。


1
/etc/default/localePAMによって読み取られます。PAMを無効にした可能性はありますか?
Gunnar Hjalmarsson 2016年

あなたはsystemd方法を試しましたlocalectl set-locale LANG=C.UTF-8か?
EdiD 2016年

@GunnarHjalmarsson私が気づくとは限りません。どうすれば確認できますか?
MechMK1 2016年

@EdiD試しましたが、再起動しましたが、変更はありませんでした
MechMK1

わからない。PAMは新規インストールで有効にする必要があります/etc/pam.d。で何も変更していなければ、PAMは機能するはずです。しかし、今のところハックとして/etc/profile.d/mylocalesetting.sh、行を作成して追加することができますexport LANG=en_US.UTF-8
Gunnar Hjalmarsson 2016年

回答:


10

私がやったことは、上記のテクニックの組み合わせです

私は最初にやった

dpkg-reconfigure locales

そして、選択した英語、utf8、そして:

localedef -i en_US -c -f UTF-8 en_US.UTF-8

/ etc / default / localeも次のように編集しました :

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANGUAGE=en_US.UTF-8

再起動後、localeと入力すると、次のようになります。

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

そしてもう警告はありません...


8

Gunnar Hjalmarssonがコメントで述べたように、答えは確かにPAM関連でした。PAMはを介して無効sshd_configにされましたが、私は正直に自分でそうしたことを覚えていません。

要約する/etc/default/localeと、無視されているように見える場合は、PAMが有効になっているかどうかを確認します。


6

次のコマンドを実行します。

locale-gen en_US.UTF-8
dpkg-reconfigure locale
dpkg-reconfigure keyboard-configuration
localedef -i en_US -c -f UTF-8 en_US.UTF-8
reboot
locale

うまくいきませんでした。locale引き続きすべてのPOSIXを表示
MechMK1 '10年

私はあなたがそれらのコマンドを実行するためのルートであったと思いますか?私は気分を害するつもりはありません。ただ確認したいだけです。
Videonauth 2016年

ええ、もちろん。エラーメッセージなどはありませんでした。
MechMK1 2016年

1
ロケールを意味しましたか?
realtebo 2016

私はこれをやっていて、それは「dpkg-reconfigure locales」のようで、それからすべてが機能します。
Hugo

0

新しい16.04.5 VMをデプロイする際xrdpに、SSHではなくこの正確な問題に遭遇しました。これを以下に追加することで解決しました/etc/pam.d/common-session

session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale

ログインメソッド全体で追加の言語やカルチャに敏感である場合は、/etc/pam.d/xrdp-sesman代わりにこれを(または別のPAM構成ファイル)に配置できます。これがデフォルトでは存在しない理由かもしれませんか?これは、新しいVMインストールのデフォルトで次のPAM構成にあります。

cron、lightdm *、login、polkit-1、sshd、su、およびsudo。

これがSSH以外のログイン方法でこの問題を抱えている人に役立つことを願っています。

common- *のPAM構成/変更のベストプラクティスを知っている人はいますか?これを実現するためのより良い方法がある場合、それを取り除くのが良いでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.