How-To среда: Как запускается Pulseaudio?
16.04.2008
PulseAudio стал стандартной аудио-подсистемой в Fedora 8, но как запускается сервис pulseaudio в сессии Gnome?

Сессии Gnome управляются gnome-session, который запускает стандартный набор клиентов (в соответствии с тем, какие программы вы настроили для своей учетной записи) каждый раз, когда запускается Gnome. Файл /usr/share/gnome/default.session, который задает список клиентов по умолчанию, выглядит так:

# This is the default session that is launched if the user doesn't
# already have a session.
# The RestartCommand specifies the command to run from the $PATH.
# The Priority determines the order in which the commands are started
# (with Priority = 0 first) and defaults to 50.
# The id provides a name that is unique within this file and passed to the
# app as the client id which it must use to register with gnome-session.
# The clients must be numbered from 0 to the value of num_clients — 1.
[Default]
num_clients=5
0,id=default0
0,Priority=60
0,RestartCommand=pam-panel-icon --sm-client-id default0
1,id=default1
1,Priority=10
1,RestartCommand=gnome-wm --default-wm gnome-wm --sm-client-id default1
2,id=default2
2,Priority=40
2,RestartCommand=gnome-panel --sm-client-id default2
3,id=default3
3,Priority=40
3,RestartCommand=nautilus --no-default-window --sm-client-id default3
4,id=default4
4,Priority=40
4,RestartCommand=gnome-volume-manager --sm-client-id default4


Как вы можете видеть, сервис PulseAudio отсутствует среди перечисленных программ (обратите внимание, что gnome-volume-manager это менеджер томов для монтирования файловых систем, а не audio volume manager). Но этот список не полный: команды, перечисленные в файлах типа .desktop в /usr/share/gnome/autostart также исполняются, когда запускается новая сессия -- но на моей системе здесь находятся только лишь bluetooth-applet.desktop, gnome-volume-manager.desktop, и
gnome-power-manager.desktop, и ни один из этих файлов не содержит ссылки на PulseAudio.

Итак, что же запускает pulseaudio? Быстрая проверка вывода команды ps показывает, что родительский процесс это, как факт, gnome-session, и strace подтверждает данный вывод.

Взгляд на список rpm пакетов, которые начинаются с "pulse" обнаруживает кое-что интересное:

$ rpm -qa|egrep '^pulse'
pulseaudio-libs-0.9.8-5.fc8
pulseaudio-module-x11-0.9.8-5.fc8
pulseaudio-0.9.8-5.fc8
pulseaudio-libs-glib2-0.9.8-5.fc8
pulseaudio-utils-0.9.8-5.fc8
pulseaudio-core-libs-0.9.8-5.fc8
pulseaudio-module-gconf-0.9.8-5.fc8
pulseaudio-esound-compat-0.9.8-5.fc8
pulseaudio-libs-0.9.8-5.fc8


Esound daemon (esd) является сервисом ранее использовавшимся проектом Gnome. Быстрый взгляд на файлы, включенные в pulseaudio-esound-compat обнаруживает, что он предоставляет фальшивую комманду esd:

$ rpm -ql pulseaudio-esound-compat
/usr/bin/esd
/usr/bin/esdcompat
/usr/share/man/man1/esdcompat.1.gz

$ file /usr/bin/esd*
/usr/bin/esd: symbolic link to `esdcompat'
/usr/bin/esdcompat: Bourne shell script text executable
/usr/bin/esd-config: Bourne shell script text executable


Страница man для esdcompat рассказывает немного больше об этой истории:

esdcompat это скрипт поддержки совместимости, который принимает те же аргументы, что и звуковой сервис ESD esd(1), но использует их, чтобы запустить звуковой сервер PulseAudio с соответствующими параметрами. Он необходим для использования PulseAudio, как встроенной замены для esd, т. е. он может быть использован для того, чтобы дать возможность gnome-session(1) запускать PulseAudio взамен esd.

А вот и ответ на последний вопрос: почему gnome-session запускает esd, если он не упомянут ни в каком из конфигурационных файлов? Несомненно, это может быть ... зашито внутри?!

$ strings -a /usr/bin/gnome-session | egrep '\/usr\/bin\/esd'
/usr/bin/esd
 

Смелей переходим по ссылке и получаем море позитива!