Bug 8817 - при локали UTF-8 без инициализации поддержки юникода screen виснет
Summary: при локали UTF-8 без инициализации поддержки юникода screen виснет
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: screen (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 5440
Blocks: 10446 9199 14167
  Show dependency tree
 
Reported: 2006-01-09 18:51 MSK by Nikolay A. Fetisov
Modified: 2008-03-14 13:31 MSK (History)
7 users (show)

See Also:


Attachments
screen.spec for 4.0.3-alt0.1 based on 4.0.3-1 (15.95 KB, text/plain)
2007-06-19 10:00 MSD, Michael Shigorin
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Nikolay A. Fetisov 2006-01-09 18:51:54 MSK
Имеется screen-4.0.2-alt3 на Compact 3.0, обновлённом до текущего Sisyphus.

При запуске выдаётся заставка с предложением "[Press Space or Return to end.]"
При нажатии на указанные клавиши screen зависает, до получения SIGKILL из
соседней консоли.

По-видимому, имеется некая проблема, связанная с нахождением командного
интерпретатора, т.к. при указании /bin/bash в командной строке screen он успешно
стартует (т.е. 'screen -s /bin/bash' работает).

Переменная окружения SHELL установлена:
$ set | grep SHELL=
SHELL=/bin/bash

Локального ~/.screen нет. Глобальный /etc/screenrc - из пакета, без изменений.
Comment 1 Dmitry V. Levin 2006-01-09 19:52:32 MSK
У меня работает,
screen-4.0.2-alt3
bash-3.1.1-alt1
Comment 2 Nikolay A. Fetisov 2006-01-09 20:17:47 MSK
У меня пакеты те же.
screen-4.0.2-alt3
bash-3.1.1-alt1

Разница, как я понимаю, в системах: у меня обновлённый до Sisyphus Compact
3.0rc10. На паре имеющихся вблизи Compact 3.0rc10 + backports ситуация та же.
Comment 3 Nikolay A. Fetisov 2006-01-09 20:19:53 MSK
Да, с тем же screen и на Sisyphus, ведущим свой начало с Master 2.4, всё работало.
Comment 4 Nikolay A. Fetisov 2006-01-09 20:35:44 MSK
Нет, не в командном интерпретаторе дело...

От пользователя работает запуск вида 
$ screen -U
или
$ LANG=ru_RU.KOI8-R screen

От root - и просто 'screen'...

Итого: при локали UTF-8 без инициализации поддержки юникода screen виснет после
вывода экрана приветствия.
Comment 5 Michael Shigorin 2006-10-24 11:42:10 MSD
Кажется, в федоре сделали автовключатор этой самой инициализации -- мож у них
патчик стырить?
Comment 6 at@altlinux.org 2006-10-24 13:51:12 MSD
Не вижу в федоре такого патчика.  Зато в 4.0.3 исправили пару каких-то юникодных
багов.
Comment 7 Michael Shigorin 2007-01-08 22:22:43 MSK
Для screen-4.0.3-alt1 проблема актуальна (система ведёт начало от M22,
/etc/screenrc никогда не трогался).

Её может замаскировать ~/.screenrc с отключением баннера:
startup_message off

Вообще мож отключить его по умолчанию?  А то анноит, честно говоря.
Comment 8 Michael Shigorin 2007-03-06 01:10:03 MSK
Лёш, поправь по возможности.  А то с UTF-8 из коробки скрин у нас будет в ней
"нерабочий".  На крайняк хоть screenrc.
Comment 9 Nikolay A. Fetisov 2007-04-19 11:29:24 MSD
screen 4.0.3-alt2 - без изменений.

Отключение баннера через директиву "startup_message off" в файле конфигурации 
снимает проблему разве что с зависанием: текст на русском ввести при этом не 
удастся, часть символов (например, 'ф') передаётся не правильно.

Добавление в ~/.screenrc директив 'defutf8 on', 'utf8 on on' также ничего не 
даёт.
Comment 10 at@altlinux.org 2007-04-19 22:25:53 MSD
Не знаю что делать.  У меня пока нет utf консоли, а то бы я занялся отладкой.
Впрочем, utf консоль, может быть, скоро будет.
Comment 11 Anton Farygin 2007-04-20 09:43:12 MSD
Алексей, можно запустить терминал в локали ru_RU.UTF-8.

тот же uxterm
Comment 12 Michael Shigorin 2007-04-21 10:35:39 MSD
(In reply to comment #10)
> Не знаю что делать.  У меня пока нет utf консоли, а то бы я занялся отладкой.
> Впрочем, utf консоль, может быть, скоро будет.
Тю. :)

--- ~/bin/uterm ---
#!/bin/sh
G_FILENAME_ENCODING=utf-8 LC_ALL=ru_RU.UTF-8 LC_COLLATE=uk_UA.UTF8
LC_CTYPE=uk_UA.UTF8 exec urxvt +sb -fn
'-*-terminus-bold-*-*-*-20-*-*-*-*-*-iso10646-*' -rv -cr yellow -tn xterm &
Comment 13 at@altlinux.org 2007-04-22 14:59:47 MSD
screen -U работает
Comment 14 Michael Shigorin 2007-04-22 15:23:20 MSD
Это известно, но не всем.  На RH-производных -U сейчас не требуется.
Comment 15 Dmitry V. Levin 2007-05-04 05:02:12 MSD
*ping*
Comment 16 at@altlinux.org 2007-06-16 22:59:55 MSD
Не знаю, что делать.  Нет идей.
Comment 17 Michael Shigorin 2007-06-19 09:21:44 MSD
Попробую собрать
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/screen-4.0.3-1.el5.src.rpm
Comment 18 Michael Shigorin 2007-06-19 10:00:23 MSD
Created attachment 2027 [details]
screen.spec for 4.0.3-alt0.1 based on 4.0.3-1

Тэкс... чего было сделано: спек подчищен до приложенного состояния, сборка
поставлена в сизифовый контейнер после удаления родной и беглой проверки, что
не осталось ошмётков (а, кроме группы в /etc/group).

cd
# поскольку там фигурировали startup_message off и KOI8
mv .screenrc .screenrc-
mv .i18n .i18n-
export LC_ALL=ru_RU.UTF-8 LANG=ru_RU.UTF-8
screen

-- проблема не воспроизводится, поскольку startup message не вываливается
(причём так и есть в /etc/screenrc).

Думаю, достаточно просто добавить такое же 

# don't display the copyright page
startup_message off

в /etc/screenrc, как и предлагалось довольно давно.

Сборка доступна здесь:
http://paq.osdn.org.ua/~mike/RPMS/screen/
Comment 19 Michael Shigorin 2007-06-19 10:06:20 MSD
(In reply to comment #9)
> Отключение баннера через директиву "startup_message off" в файле конфигурации 
> снимает проблему разве что с зависанием: текст на русском ввести при этом не 
> удастся, часть символов (например, 'ф') передаётся не правильно.
Это осталось, причём явно не проблема терминала -- который дёргается так:

#!/bin/sh
G_FILENAME_ENCODING=utf-8 LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8
LC_COLLATE=uk_UA.UTF8 LC_CTYPE=uk_UA.UTF8 exec urxvt +sb -fn
'-*-terminus-bold-*-*-*-20-*-*-*-*-*-iso10646-*' -rv -cr yellow -tn xterm &

и сам по себе позволяет ввод e.g. "фыва" или "йцукен".

> Добавление в ~/.screenrc директив 'defutf8 on', 'utf8 on on' также ничего не 
> даёт.

screen -U из сборки в предыдущем комментарии при этом работает нормально.
Comment 20 Michael Shigorin 2007-06-29 17:17:25 MSD
<morozov> Коммит f64bee34fba522762a12e9afa54289de0824d5db
(screen-4.0.2-alt-cp866.patch) ломает работу screen'а в UTF-8
Comment 21 Alexey Morozov 2007-06-29 17:19:14 MSD
Коммит f64bee34fba522762a12e9afa54289de0824d5db (screen-4.0.2-alt-cp866.patch) 
ломает работу screen'а в UTF-8
Comment 22 Kachalov Anton 2007-06-29 20:25:06 MSD
(In reply to comment #21)
> Коммит f64bee34fba522762a12e9afa54289de0824d5db (screen-4.0.2-alt-cp866.patch) 
> ломает работу screen'а в UTF-8

Вы сам патч-то видели?
+  { "CP866",           0,              0x80|'#',       0, 1, 0 },              
+  { "IBM866",          0,              0x80|'#',       0, 1, 0 },              
Это имеет какое-либо отношение к UTF8? Думаю, что "раз не работает с этим, то
давайте оторвём" явно не выход.
Comment 23 at@altlinux.org 2007-07-04 20:53:25 MSD
Отключать startup_message нежелательно из соображений GPL 2c.
Comment 24 at@altlinux.org 2007-07-04 20:59:10 MSD
Точняк, если откатить cp866.patch, то startup_message перестает зависать.
Comment 25 Michael Shigorin 2007-07-05 01:06:44 MSD
Там есть --help, которого довольно многим; если это годится для RH, для нас
скорее тоже сгодится.

2 mouse: мне неудобно перед тобой, но предпочитаю факты отсутствию
предположений.  Докопаться до причины ломания двумя строчками чего-то, кроме
гвоздей в индексах или ещё какой неявной завязки на порядок -- не могу. (мож
попробовать эти две строчки в конец списка или по крайней мере строчкой ниже
сдвинуть?)
Comment 26 Slava Semushin 2007-07-19 15:26:15 MSD
+1 к startup_message off by default
Comment 27 at@altlinux.org 2007-07-19 15:35:57 MSD
$ grep -C1 -m1 announcement /usr/share/license/GPL-2
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
$

Это отключается в ~/.screenrc.
Comment 28 Michael Shigorin 2007-07-19 15:40:47 MSD
ls или less при запуске, однако, не вываливают пол-экрана legalese с проблемами
в юникоде :)

В RH сочли осмысленным отрубить, да и у меня в таскаемом .screenrc это первая и
последняя строчка.

Не надо доводить до абсурда, дух же там в удобстве, да и буква без особого
фундаментализма.

Впрочем, это всё может быть здесь неактуально (FR про анноящий экран, а не bug
про UTF-8).
Comment 29 at@altlinux.org 2007-07-19 15:42:13 MSD
Я откатил cp866.patch (взял коммит из morozov/packages/screen.git).
Респект Морозову!

Я также исправил все warnings в режиме -DDEBUG -Werror.  Желающие прикрутить
назад cp866 благоволят собирать screen в режиме rpmbuild --enable debug.  Там
какой-то чумной код прохода по этим таблицам, в котором я, увы, с ходу не
разобрался.  (ЕСТЬ ЗАСАДА: теперь в кмулятивный патч не помещается бинарный файл
кодировки cp866; к сожалению mouse в свое время не открыл способ получения этого
файла.)

Закрываю баг как FIXED; может быть переоткрою баг с cp866, чтобы не забылось.
Comment 30 Michael Shigorin 2007-07-19 15:44:38 MSD
Спасибо!
Comment 31 Slava Semushin 2007-07-19 15:45:04 MSD
(In reply to comment #27)
> $ grep -C1 -m1 announcement /usr/share/license/GPL-2

Алексей, между удобством для пользователя и следованием букве закона я предлагаю
выбрать удобство, для нас, для пользователей. Иначе, это походит на фанатизм
Столлмана и то как это сделано в Debian (где после логина на консоль
вываливается подобное предупреждение на пять строк).

Почти всё отключают это приветствие, а кто не отключает, то, наверное, просто не
в курсе, что его можно отключить ;)
Comment 32 at@altlinux.org 2007-07-19 15:49:59 MSD
То что сочли в RH это не аргумент.  Авторы GNU screen сочли нужным по умолчанию
выводить startup_message во исполнение требования GPL (которое, впрочем, не
является слишком строгим).  Я не свожу к абсурду, просто думаю оставить как
есть.  Если авторы less надумают выводить announcement, это конечно будет более
актуальной проблемой.  В отличие от less, screen я запускаю один раз per uptime.
 При переподключении к сессии announcement не выводится.

Короче, можно открыть отдельный баг и там будем дальше спорить. :)