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:
Страница 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 |