LINUX.ORG.RU
ФорумTalks

Всё-таки таких программистов надо карать

 ,


0

2

Юзкейз:

  • На виртуальной консоли запускаем mplayer, настроенный воспроизводить в PA. mplayer автоматически запускает PA, если тот еще не запущен.
  • На другой виртуальной консоли логинимся через lxdm в графический сеанс.
  • Вылогиниваемся из графического сеанса.
  • PA делает харакири, mplayer замолкает.

Этим программистам уже ничего не поможет.

Ответ на: комментарий от Zhbert

Оу, у меня и так на очереди дохренища патчей писать. :}

Мне интересно, они вообще как-то тестируют свою автоматику, связанную с активностью сенасов? Или такой юзкейз, что «обычный пользователь» может залогиниться в текстовой консоли, вообще не предполагается поттерингами?

geekless ★★
() автор топика

Каким именно образом карать? Будет ли это в достаточной степени карательно для всех программистов или, по крайней мере, для большинства?

abraziv_whiskey ★★★★★
()

А в обеих консолях логинились под одним и тем же пользователем? И что в логах PA?

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

Это не патч, это архитектуру нужно менять. Или настраивать pulseaudio на работу от рута, а не от пользователя, как почему-то настроено по дефолту.

snizovtsev ★★★★★
()

PA так спроектирован. Он запускается только когда нужно. Он не форкается, не отвязывается от сессий и т.п. В этом и плюс и минус, но так задумано. Можешь попробовать пускануть пулсу от рута или еще как-то независимо от иксов.

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

Он не форкается, не отвязывается от сессий и т.п.

Так сессия, в которой он запущен, никуда не делась.

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

А в обеих консолях логинились под одним и тем же пользователем?

Да.

И что в логах PA?

А где они у него? В системный лог он пишет только это:

Jul 13 13:09:29 localhost pulseaudio[6781]: [pulseaudio] pid.c: Daemon already running.
при попытке запустить вторую копию.

При закрытии ничего не пишет.

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

По аналогии, почему процесс mc запущенный из вирт. консоли, даже забэкраунжевый отваливается, если разлогинится? :) Вот взять mocp, то он отсоединяется от консоли, точно также как делает это screen. Родительский процесс в пулсе кем был? После разлогирования он убивает своих childов и убивается иксами.

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

Б-же мой, чем ты читаешь?

Сказано же, mplayer был в другой вирт.консоли, и значит PA запущен там же.

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

Ладно, кажится я прояснил, что имелось ввиду под вирт. консолью - fb/tty консоль без иксов, так? Тогда есть вероятность, что по выходу пулса делает вместо kill [mypid], killall pulseaudio. Пиши баг репорт :)

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

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

Yareg ★★★
()

покарать надо исключительно Поттеринга, аффтара данного поделия

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

Верно, но может также чистить за собой критичные файлы и прибивать себя внезависимости от кол-ва залогиненных юзерей.

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

Попробуй еще сделать закрытия mplayer из вирт консоли, при этом lxdm оставь и попытайся запустить музон в пульсу - уверен в логе пулься перезапустится. Если это не так, что значит так задумано, что пульсой можно пользоваться только из под иксов.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)

Интересно, что никакими извращениями вручную с ck-launch-session, dbus, иксами и PA мне не удаётся добиться такого эффекта. Блин, что-то тут не то...

geekless ★★
() автор топика

Всё веселее и веселее. Посмотрел, что PA пишет в stderr:

#### запускаю PA на отдельной виртуальной консоли
W: [pulseaudio] sink.c: Default and alternate sample rates are the same.
W: [pulseaudio] source.c: Default and alternate sample rates are the same.
E: [pulseaudio] module-jackdbus-detect.c: Unable to contact D-Bus session bus: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
E: [pulseaudio] module.c: Failed to load module "module-jackdbus-detect" (argument: ""): initialization failed.
E: [pulseaudio] bluetooth-util.c: org.bluez.Manager.ListAdapters() failed: org.freedesktop.DBus.Error.Spawn.ChildExited: Launch helper exited with unknown return code 1
E: [pulseaudio] main.c: Module load failed.
W: [pulseaudio] server-lookup.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
W: [pulseaudio] main.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
#### переключаюсь в lxdm, вхожу в сеанс.
#### выхожу из сенса
XIO:  fatal IO error 11 (Ресурс временно недоступен) on X server ":0"
      after 22 requests (6 known processed) with 0 events remaining.

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

Или такой юзкейз, что «обычный пользователь» может залогиниться в текстовой консоли, вообще не предполагается поттерингами?

А ты пробовал читать документацию?

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

а если то же самое провернуть с двумя иксовыми сеансами?

Дважды залогиниться под одним пользователем lxdm не даёт.

Если логиниться под разными, то должно запуститься по отдельному PA на каждого пользователя, и происходит переключение прав на вывод звука при переключении между иксами. Но вот что-то на этой машине не работает эта фича, пойду погуглю, как это чинится.

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

А, нет, работает переключение прав доступа, только глючит дико. При переключении с пользователя q11 на vadim, q11 теряет права, и audacious встаёт на паузу. А вот при переключении с vadim на q11, vadim права не теряет автоматом, пока есть хоть один активный источник звука. Хрень какая-то.

geekless ★★
() автор топика

выкинь эту дрянь и помой руки

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

Всё, понял, в чем разница между этими аккаунтами. Если пользователь в группе audio, он имеет безусловные права на вывод звука. Если нет — то только когда его сеанс активен.

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

Ну ты-то конечно быстрее понял бы причину, чем за 2 минуты. Возьми конфетку с полки :}

geekless ★★
() автор топика

На другой виртуальной консоли логинимся через lxdm в графический сеанс.

А если в другой виртуальной консоли залогиниться в строке приглашения и запустить Х-ы а потом убить их?

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

только g. и то вроде как для следующего релиза

ZuBB ★★★★★
()

А если пульсу запустить с настройкой system-wide? Как он себя в таком варианте ведет?

Loki13 ★★★★★
()

То есть Поттеринг таки не торт?

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

Итак, что мы видим в случае, когда баг воспроизводится:

  • PA зарускается без доступак иксам.
  • Запускается иксовый сеанс.
  • PA каким-то образом узнаёт об этом и подключается к нему.
  • Иксы убиваются, PA падает.

Единственныый разумный способ, как PA может узнать об иксах — dbus. Но сеансовая dbus тоже не запущена на момент запуска PA. Остаётся... consolekit через системную dbus?

Я попытался вручную всё-то сделать:

запустить первый PA
переключиться в другую консоль
xinit /usr/bin/openbox -- :1
терминал в иксах:
ck-launch-session bash
eval "$(dbus-launch --sh-syntax --exit-with-session)"
pulseaudio 
убить иксы.
Нет, первый PA не падает.

Пойду RTFM...

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

RTFM помогло, способ передачи информации о запущенных иксах в PA найден. Это скрипт /usr/bin/start-pulseaudio-x11, делающий /usr/bin/pactl load-module module-x11-publish «display=$DISPLAY» > /dev/null

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

Гы, если при помощи pactl unload-module выгрузить иксовые модули из иксов перед убийством иксов, PA не падает.

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

Или такой юзкейз, что «обычный пользователь» может залогиниться в текстовой консоли, вообще не предполагается поттерингами?

Подай им идею. Пускай сделают симлинк на tty7 =)

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

если при помощи pactl unload-module выгрузить иксовые модули из иксов перед убийством иксов, PA не падает.

тогда виноват модуль поддержки x11, т.е. независимое от x11 становится 100% зависимым при подключении модуля. Это значит баг в модуле.

Atlant ★★★★★
()

Никогда не устанавливаю PulseAudio. Зачем?

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