Bug 38951
| Summary: | нечитаемый текст предупреждения /etc/X11/xinit/xrootwarn* в локали UTF-8 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Michael Shigorin <mike> | ||||||||
| Component: | xinitrc | Assignee: | placeholder <placeholder> | ||||||||
| Status: | NEW --- | QA Contact: | qa-sisyphus | ||||||||
| Severity: | normal | ||||||||||
| Priority: | P5 | CC: | antohami, burykinne, glebfm, ldv, placeholder | ||||||||
| Version: | unstable | Keywords: | usability | ||||||||
| Hardware: | all | ||||||||||
| OS: | Linux | ||||||||||
| URL: | http://www.opennet.ru/openforum/vsluhforumID3/121851.html#76 | ||||||||||
| Attachments: |
|
||||||||||
Волей случая столкнулся с этой ошибкой, и возможно могу предложить решение проблемы.
Само решение оформил отдельным патчем. Если не будет возражений, могу сам же его и применить к пакету в рамках NMU.
[ "$LANG" = POSIX -o "$LANGUAGE" = POSIX ] &&
SourceIfNotEmpty /etc/sysconfig/i18n ||:
В момент запуска скрипта xrootwarn отрабатывает условие, указанное выше. В результате чего языковые переменные LC оказываются выставлены в ru_RU.UTF-8, что и является причиной отображения предупреждения в неправильной кодировке. Если оставить значения переменных как POSIX, или выставить в en_US.UTF-8, то в этом случае сообщение с предупреждением показывается в том виде, в котором и ожидается.
Предлагаю внутри скрипта экспортировать переменную LC_MESSAGES="en_US.UTF-8", которая будет действительна только в рамках запущенного скриптом процесса, и соответственно никак не повляет на дальнейшую работу системы с локалями в целом.
В прикладываемом патче я ограничился только добавлением экспорта переменной LC_MESSAGES, но как мне кажется имеет смысл удалить полностью указанное условие. Не столько из за влияния на появление ошибки (по правде говоря не так уже много людей, в здравом уме хотят залогиниться рутом в GUI), сколько по причине дублирования аналогичного функционала, выполняющегося на этапе применения скриптов из /etc/profiles.d, и от которого пользователь всё равно никуда не денется даже логинясь под рутом.
Created attachment 11272 [details]
Патч
Created attachment 11273 [details]
Сообщение в неправильной кодировке
Created attachment 11274 [details]
Сообщение, в "первозданном" виде
Актуально в xinitrc-2.4.47-alt8 (Sisyphus 2026-09-16). Дело не в локали, а в том, как вызывается xmessage.
Стенд: клон шаблона poligon 3138 (sisyphus-workstation-11.2), apt-get dist-upgrade до Sisyphus от 2026-09-16,
MATE 1.28 / X11, системная локаль ru_RU.UTF-8, xmessage-1.0.5-alt1, gxmessage не установлен.
$ LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 /etc/X11/xinit/xrootwarn.real
Warning: Missing charsets in String to FontSet conversion
Warning: Unable to load any usable fontset
В окне — «Ð\222Ñ\213 запÑ\203Ñ\201Ñ\202или …»: байты UTF-8 из xrootwarn.mo показаны как Latin-1,
непечатные — восьмеричными кодами.
Тот же xmessage с fontSet выводит кириллицу правильно (проверено скриншотом):
$ xmessage -xrm '*international: true' \
-xrm '*fontSet: -misc-fixed-medium-r-normal--13-*-*-*-*-*-iso10646-1' \
"Вы запустили графический интерфейс от имени root. Проверка UTF-8."
Причина — install/etc/X11/xinit/xrootwarn.real:26 (ветка sisyphus):
exec "$XMESSAGE" -font fixed -center -buttons Continue:0,Exit:2 -default Exit "$message"
`-font` в Xaw задаёт однобайтовый шрифт и отключает i18n-вывод, поэтому UTF-8 печатается побайтно.
Правка из комментария 1 (LC_MESSAGES=en_US.UTF-8) убирает симптом, но ценой отказа от русского перевода,
который в пакете есть (/usr/share/locale/ru/LC_MESSAGES/xrootwarn.mo).
Примерная правка (пересборкой не проверена), вместо строки 26:
if [ "$XMESSAGE" = xmessage ]; then
exec xmessage -xrm '*international: true' \
-xrm '*fontSet: -misc-fixed-medium-r-normal--13-*-*-*-*-*-iso10646-1' \
-center -buttons Continue:0,Exit:2 -default Exit "$message"
fi
exec "$XMESSAGE" -font fixed -center -buttons Continue:0,Exit:2 -default Exit "$message"
gxmessage (который ищется первым) и так работает с UTF-8, ему -xrm не нужен.
Найдено при ретесте #32267 (xorg-apps): там тот же симптом был заведён на xmessage, но чинить надо вызов
здесь — #32267 закрыт как NOTABUG.
|

Description
Michael Shigorin 2020-09-16 23:54:16 MSK