このCentOS7システムと同じように、ここで疑問に思っています。
$ locale -a
<snip>
en_US.utf8
<snip>
それでも:
$ localectl
System Locale: LANG=en_US.UTF-8
これに加えて、X11(/usr/share/X11/locale/locale.dir)による優先名は次のとおりです。
$ grep 'en_US.UTF-8$' /usr/share/X11/locale/locale.dir
en_US.UTF-8/XLC_LOCALE en_US.UTF-8
en_US.UTF-8/XLC_LOCALE: en_US.UTF-8
En_US.utf8には幸運なことに、エイリアスがあります。
$ grep 'en_US.utf8' /usr/share/X11/locale/locale.alias
en_US.utf8 en_US.UTF-8
en_US.utf8: en_US.UTF-8
他のいくつかはそれほど幸運ではありません、例えば。 ru_UA.utf8:
$ locale -a | grep ru_UA.utf8
ru_UA.utf8
$ grep 'ru_UA.utf8' /usr/share/X11/locale/locale.alias
$ grep 'ru_UA.UTF-8' /usr/share/X11/locale/locale.dir
en_US.UTF-8/XLC_LOCALE ru_UA.UTF-8
en_US.UTF-8/XLC_LOCALE: ru_UA.UTF-8
選択したロケールがX11ロケールにない場合、これがやや煩わしい理由は、GDM(またはgnome-session?)が「utf8」バージョンの使用を強制し、次のようなメッセージでXプログラムを中断するためです。「警告:ロケールではありません。 Xlibでサポートされ、ロケールはC "に設定されています。 I could /usr/share/X11/locale/locale.aliasを編集するだけですが、実際に正しいバージョンについての詳細があればいいのですが。
GNU libcソース(intl/l10nflist.c:_nl_normalize_codeset)状態のコメント:
コードセット名の標準はありません。
コードセット名は、その関数によってすべて小文字に正規化され、英数字以外のすべての文字が削除されます。つまり、「UTF-8」は「utf8」に変わります。
ロケールアーカイブ内のロケール名は、正規化されたコードセット名を使用しています。
標準がないため、GDMは「utf8」を使用する権利の範囲内であり、「ru_UA.utf8」のようなロケールは 無効 ではありません。 「utf8」は好ましくないかもしれませんが、正規化された形式であるため、(少なくともlibc標準では)間違いなく受け入れられます。