xorg-xdmはキリル文字を出力できません

xorg-xdmはキリル文字を出力できません

これUbuntu Nerdフォントシステムにすでにインストールされています。

xfontselフォントを定義します。スクリーンショットに示すように、キリル文字が正しく表示されます(最後の行)。

ここに画像の説明を入力してください。

man iso_8859-5私のエンコーディングの1つまたは別の文字を取得できるコードを教えてください。

ここに画像の説明を入力してください。

Xresources構成ファイルでキリル文字の順序を指定しました。

...
Xlogin*titleMessage:             \260\261\262\263\264\265\266
xlogin*greeting:                 \260\261\262\263\264\265\266
xlogin*namePrompt:               Username:\040
xlogin*passwdPrompt:             Password:\040
xlogin*fail:                     Authentication failed
...
xlogin*greetFont:                -*-ubuntu nerd font-*-r-normal-*-17-120-100-100-*-*-iso8859-5
xlogin*font:                     -*-ubuntu nerd font-*-r-normal-*-17-120-100-100-*-*-iso8859-5
xlogin*promptFont:               -*-ubuntu nerd font-*-r-normal-*-17-120-100-100-*-*-iso8859-5
xlogin*failFont:                 -*-ubuntu nerd font-*-r-normal-*-17-120-100-100-*-*-iso8859-5
xlogin*greetFace:                Ubuntu Nerd Font-14:bold
xlogin*face:                     Ubuntu Nerd Font-10
xlogin*promptFace:               Ubuntu Nerd Font-12:bold
xlogin*failFace:                 Ubuntu Nerd Font-10:bold

ただし、起動時にxdm設定ファイルに無効な文字が指定されました。

ここに画像の説明を入力してください。

何が問題なのでしょうか?

さまざまなソリューションを試しました。localeお好みのエンコーディングに設定してください。ファイルXresourcesもUTF-8形式です。私はすべてを試しました。ただし、結果としてテキストを出力すると、各キリル文字はダブルバイトで表されます。xdmUTF-8を理解していないようです。

アップデート1:

Unicode出力なし

Xlogin*titleMessage:             Добро пожаловать
xlogin*greeting:                 Добро пожаловать
xlogin*namePrompt:               Пользователь:\040
xlogin*passwdPrompt:             Пароль:\040
xlogin*fail:                     Ошибка аутентификации

xlogin*greetFont:                -*-ubuntumono nerd font mono-*-r-normal-*-17-120-100-100-m-*-iso8859-5
xlogin*font:                     -*-ubuntumono nerd font mono-*-r-normal-*-17-120-100-100-m-*-iso8859-5
xlogin*promptFont:               -*-ubuntumono nerd font mono-*-r-normal-*-17-120-100-100-m-*-iso8859-5
xlogin*failFont:                 -*-ubuntumono nerd font mono-*-r-normal-*-17-120-100-100-m-*-iso8859-5
xlogin*greetFace:                Ubuntumono Nerd Font-14:bold:italic
xlogin*face:                     Ubuntumono Nerd Font-10
xlogin*promptFace:               Ubuntumono Nerd Font-12:bold
xlogin*failFace:                 Ubuntumono Nerd Font-10:bold

ここに画像の説明を入力してください。

アップデート2:

もう一つの設定オプションです。xdm指定されたフォントが見えないようです。

ここに画像の説明を入力してください。

xlogin*titleMessage:             Добро пожаловать
xlogin*greeting:                 Добро пожаловать
xlogin*namePrompt:               Пользователь:\040
xlogin*passwdPrompt:             Пароль:\040
xlogin*fail:                     Ошибка аутентификации

xlogin*greetFont:                -*-ubunt nerd font-*-r-*-*-*-*-*-*-*-*-*-uni
xlogin*font:                     -*-ubunt nerd font-*-r-*-*-*-*-*-*-*-*-*-uni
xlogin*promptFont:               -*-ubunt nerd font-*-r-*-*-*-*-*-*-*-*-*-uni
xlogin*failFont:                 -*-ubunt nerd font-*-r-*-*-*-*-*-*-*-*-*-uni
xlogin*greetFace:                Ubuntu Nerd Font-14:bold:italic
xlogin*face:                     Ubuntu Nerd Font-10
xlogin*promptFace:               Ubuntu Nerd Font-12:bold
xlogin*failFace:                 Ubuntu Nerd Font-10:bold

ここに画像の説明を入力してください。

ベストアンサー1

xdmのウェルカムプログラム(Debianおよび派生製品)はXftを使用して文字列を描画します(参照:ソースコード):

# define DRAW_STRING(f, x, y, m, l) \
    /* Debug("DRAW_STRING(%s, %d, %d, %s, %d)\n", #f, x, y, m, l); */ \
    XftDrawString8 (w->login.draw, &w->login.f##color, w->login.f##Face, \
            x, y, (FcChar8 *) (m), l)

Xftはさまざまな文字列描画バリエーションを提供します(参照:手動):

Families of Functions
       Xft provides groups of drawing functions which differ according to  the
       way  the  data is encoded, e.g., 8-bit (ISO-8859-1) versus UTF-8.  Here
       is a summary of these related functions:

       Encoding   XftDrawString*       XftTextExtents*       XftTextRender*
       -------------------------------------------------------------------------
       8          XftDrawString8       XftTextExtents8       XftTextRender8
       16         XftDrawString16      XftTextExtents16      XftTextRender16
       16BE       XftDrawString16      XftTextExtents16      XftTextRender16BE
       16LE       XftDrawString16      XftTextExtents16      XftTextRender16LE
       32         XftDrawString32      XftTextExtents32      XftTextRender32
       32BE       XftDrawString32      XftTextExtents32      XftTextRender32BE
       32LE       XftDrawString32      XftTextExtents32      XftTextRender32LE
       UTF-8      XftDrawStringUtf8    XftTextExtentsUtf8    XftTextRenderUtf8
       UTF-16     XftDrawStringUtf16   XftTextExtentsUtf16   XftTextRenderUtf16

挨拶する人が使うgreetFontXft以外の構成の場合(参照)ソースコード):

#ifndef USE_XFT
    {XtNfont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),
    offset (textFont), XtRString,   "*-new century schoolbook-medium-r-normal-*-180-*"},
    {XtNpromptFont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),
    offset (promptFont), XtRString, "*-new century schoolbook-bold-r-normal-*-180-*"},
    {XtNgreetFont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),
    offset (greetFont), XtRString,  "*-new century schoolbook-bold-i-normal-*-240-*"},
    {XtNfailFont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),
    offset (failFont), XtRString,   "*-new century schoolbook-bold-r-normal-*-180-*"},
#else /* USE_XFT */
    {XtNface, XtCFace, XtRXftFont, sizeof (XftFont *),
        offset (textFace), XtRString, "Serif-18"},
    {XtNpromptFace, XtCFace, XtRXftFont, sizeof (XftFont *),
        offset (promptFace), XtRString, "Serif-18:bold"},
    {XtNgreetFace, XtCFace, XtRXftFont, sizeof (XftFont *),
        offset (greetFace), XtRString, "Serif-24:italic"},
    {XtNfailFace, XtCFace, XtRXftFont, sizeof (XftFont *),
        offset (failFace), XtRString, "Serif-18:bold"},
    {XtNforeground, XtCForeground, XtRXftColor, sizeof(XftColor),
        offset(textcolor), XtRString,   XtDefaultForeground},
    {XtNpromptColor, XtCForeground, XtRXftColor, sizeof(XftColor),
        offset(promptcolor), XtRString, XtDefaultForeground},
    {XtNgreetColor, XtCForeground, XtRXftColor, sizeof(XftColor),
        offset(greetcolor), XtRString,  XtDefaultForeground},
    {XtNfailColor, XtCForeground, XtRXftColor, sizeof (XftColor),
    offset(failcolor), XtRString,   XtDefaultForeground},
#endif

xdmのマンページでは、この違いについて説明します。

       xlogin.Login.greetFace
              The face used to display the greeting when built with  Xft  sup‐
              port.  The default is ‘‘Serif‐24:italic’’.

       xlogin.Login.greetFont
              The  font  used  to display the greeting when not built with Xft
              support.

フォントが設定されていないため、グリーティングはデフォルトのフォントを使用します(Xftのドキュメントによると、ISO-8859-1やISO-8859-5などの8ビットエンコーディングに制限されています)。

おすすめ記事