LINUX.ORG.RU

[ARCH] Нашёл баг в startx, помогите исправить


0

1

Здравствуйте. Я установил ARCH и очень им доволен. Но когда я настроил автоматический запуск X без входа через agetty, то в vt1 стало вываливаться сообщение об ошибке от xauth. Сообщение говорит, что xauth не может найти файл с длинным странным именем (позже оказалось, что это случайное число в hex, генерируемое mcookie).

Я нашёл место в файле /usr/bin/startx, где происходит некорректный вызов xauth, вот листинг этого участка:

    for displayname in $authdisplay $hostname$authdisplay; do
        authcookie=`xauth list "$displayname" \
        | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
        if [ "z${authcookie}" = "z" ] ; then
            xauth -q << EOF 
add $displayname . $mcookie
EOF
        removelist="$displayname $removelist"
        else
            dummy=$(($dummy+1));
            # метка 1
            xauth -q -f "$xserverauthfile" << EOF
add :$dummy . $authcookie
EOF
            # метка 2
        fi
    done

На этом участке вызывается xauth для 2-х значений $displayname - :0 и localhost.localdomain:0 . Ошибку выдаёт код между метками 1 и 2. Причём я обнаружил, что в случае $displayname=:0 xauth не ругается, а в случае $displayname=localhost.localdomain:0 xauth ругается потому, что $authcookie содержит два длинных числа в hex, разделённых пробелом, вместо одного числа в первом случае.

Оказалось, что xauth list localhost.localdomain:0 выводит следующее:

localhost.localdomain:0  MIT-MAGIC-COOKIE-1  d6e83a087d8f10ad756de8c41a06c9ed
localhost.localdomain:0  MIT-MAGIC-COOKIE-1  d6e83a087d8f10ad756de8c41a06c9ed

В то время как xauth list :0 выводит

localhost.localdomain:0  MIT-MAGIC-COOKIE-1  d6e83a087d8f10ad756de8c41a06c9ed

Вот содержимое файла /etc/hosts на моей машине:

127.0.0.1	localhost.localdomain	localhost arch

То есть понятно, что startx ожидает одну строку, а получает две.

Вопрос к аудитории: это баг в startx или в xauth ?

Добавьте /etc/{init.d,rc.d}/{xdm,gdm,kdm} или что там у вас на уровень запуска.

kostik87 ★★★★★ ()

ИМХО, бага в xauth. Но, может не надо было дописывать «arch» в одну строку с localhost в /etc/hosts?

mky ★★★★★ ()
Ответ на: комментарий от baverman

>> authcookie=`xauth list «$displayname | head -1 » \

| sed -n «s/.*$displayname[[:space:]*].*[[:space:]*]//p»`

Это, конечно, сработает, но хотелось бы исправить в апстриме. Удручает наличие глупых багов с свободных проектах. Например, в том же startx есть опечатка в названии переменной $xserverags, из-за X-серверу не передаются аргументы. Xauth тоже хорош, в багзилле есть запись, касающиеся вывода xauth list, а именно когда hostname resolving занимает более 4 секунд, перестать ждать и не выдавать ссответствующую этому hostname запись. Только вот оказалось, что следующий вызов xauth list зациклится и зависнет. То есть автор патча, реализующего фичу, вообще ничего не тестировал. И человек, принявший патч в апстрим, - тоже.

Но я всё-таки докопаюсь до истины, спрошу в IRC, подготовлю патч.

liberium ()
Ответ на: комментарий от liberium

liberium> Удручает наличие глупых багов с свободных проектах.

Дык все говорят: «дайте нам качественный продукт и бесплатно», при этом просьбы помочь не то что кодом — тестированием, считают оскорблением.

sdio ★★★★★ ()
Ответ на: комментарий от baverman

Вообще я Arch потому и выбрал, что там почти все пакеты vanilla. И если находишь баг, исправляешь, то можно сразу в апстрим, потому что твой патч исправляет баг в апстриме, а не в дистропатче.

liberium ()
Ответ на: комментарий от sdio

>> Дык все говорят

Ну не все, допустим. На ЛОРе недавно деньги собирали на Novacut, так набралоь прилично, в комментах на кикстартере отметили наплыв русских.

Хотя хотелось бы поболее именно патчей и тестирования, да.

liberium ()
Ответ на: комментарий от liberium

В xorg-xinit уже есть один арчевский патч. Поэтому есть смысл сначала исправить в дистрибутиве. Тем более freedesktop слишком жирен и неповоротлив — релиз с исправлениями будет совсем не скоро.

baverman ★★★ ()

Это не баг, это фича. Тому, кто писал этот скрипт просто в голову не приходило, что кто-то на 127.0.0.1 повесит ещё какое-то имя кроме localhost.

Обьясняю в картинках:
/etc/имя.жены
1.0 Маша
10.x Солнце
192.x Котик

Теперь поставь рядом с Маша имя Света и настойчиво, по второму имени пингани жену. Да, она в конце концов откликнется, но ты проникнешься тем, что писатель скрипта даже не думал, что кто-то так будет делать.




bass ★★★★★ ()
Ответ на: комментарий от baverman

В xorg-xinit уже есть один арчевский патч

Есть, но он минорен и не в тему. Я отошлю патч и арчестроителям, и в апстрим. Кстати багу, с которым я столкнулся, уже 4 года, а он всё не исправлен.

Тем более freedesktop слишком жирен и неповоротлив

freedesktop - это хостинг, ты хотел сказать xorg? Тогда я согласен. Довольно показателен коммент в багрекере gentoo, касающийся сабжевого бага:

The Xauth bits are dark magic, even to most upstream X devs.

There's little we can do here, let's track the bug upstream. Here's to hoping someone actually looks at it someday. :)

liberium ()
Ответ на: комментарий от liberium

Есть, но он минорен и не в тему

Я из-за его отсутствия столько кирпичей наоткладывал, каждый раз просматривая хомяк, а ты говоришь минорен.

freedesktop - это хостинг, ты хотел сказать xorg?

Верно, проектов там вагон.

baverman ★★★ ()
Ответ на: комментарий от baverman

>> а ты говоришь минорен

Я арчевод-новичок и воспринимаю отсутствие кирпичей у меня под стулом как должное :)

liberium ()
Ответ на: комментарий от bass

Я понял, почему команда xauth list localhost:0 выдаёт 2 записи.

Выше я привёл не всё содержимое /etc/hosts, вот файл полностью:

127.0.0.1	localhost.localdomain	localhost arch
::1		localhost.localdomain	localhost

Команда xauth list arch:0 выдаёт одну запись, потому что имя хоста arch соответствует одному IP. Однако localhost соответствует 2-м (!) различным (с точки зрения xauth) IP.

Я считаю, что правильнее будет поправить startx. Потому что неотождествление IP и IPv6 адресов в xauth больше похоже на фичу, чем на баг.

liberium ()
Ответ на: комментарий от liberium

>>Потому что неотождествление IP и IPv6 адресов в xauth больше похоже на фичу, чем на баг.

проблема имеет место быть, если /etc/hosts в таком виде:
127.0.0.1   localhost
::1      localhost
»host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1
»xauth add localhost:0 MIT-MAGIC-COOKIE-1 ce234f956a2ddef8eb2d94fb9bd6af81
»xauth list localhost:0
localhost:0 MIT-MAGIC-COOKIE-1 ce234f956a2ddef8eb2d94fb9bd6af81
localhost:0 MIT-MAGIC-COOKIE-1 ce234f956a2ddef8eb2d94fb9bd6af81

Но, видимо слишком много подобных утилит неадекватно воспринимают ipv4+ipv6, что в дебиане например по дефолту формируется такой /etc/hosts
127.0.0.1 localhost
::1 ip6-localhost ip6-loopback

Насчёт обрезания до 1й строки в startx это конечно выход, но мне кажется какой-то костыльный, считаю надо оформлять баг на xauth

bass ★★★★★ ()
Ответ на: комментарий от bass

>> считаю надо оформлять баг на xauth

Я ещё спрошу вечером на irc.freenode.net#xorg-devel считается ли это багом.

liberium ()
Ответ на: комментарий от bass

Кстати, о сабжевом баге известно давно, около 4-х лет (см. сообщения выше).

liberium ()
Ответ на: комментарий от bass

После беседы в ирке понял, что баг в startx, ссылка на патч - сверху.

liberium ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.