PulseAudioはどのように起動しますか?


15

PulseAudioはシステム上で常に実行されており、クラッシュしたり強制終了したりすると、即座に再起動します。ただし、実際にPulseAudioを起動することはありません。

とをチェック/etc/init.d//etc/X11/Xsession.d/、をチェックsystemctl list-units -aしました。PulseAudioはどこにも見つかりません。

どうしてPulseAudioは、私が実行することなく魔法のように自動的に起動するのでしょうか?

Debian 8(jessie)とxinitおよびi3ウィンドウマネージャー、およびPulseAudio 5を使用しています。

回答:


13

共有オブジェクトのlibpulse *ファミリーにリンクするプロセスは、Xおよびi3ウィンドウマネージャーを実行する前または後に、オーディオサブシステムとのインターフェースの試みの副産物として、ユーザープロセスの下でPulseAudioサーバーを暗黙的に自動生成する可能性があります。PulseAudioのクリエイターであるLennart Poetteringは、systemd-develメーリングリストへの2015-05-29メールでこれを確認しているようです。

「pulseaudioは通常、システムサービスではなくユーザーサービスです。ユーザーセッションがsystemdによって管理されるように完全に変換されない限り(これはほとんどありません)、したがってsystemdは開始にまったく関与しません。

「PAは通常、セッションセットアップスクリプトまたはサービスから開始されます。たとえば、Gnomeではgnome-sessionです。ライブラリが使用されている場合はオンデマンドで自動生成され、欠落していることに注意してください。」

たとえば、Debian Stretch(テスト)では、WebブラウザーIceWeaselは2つのlibpulse *共有オブジェクトにリンクしています。1)libpulsecommon-7.1.so; および2)libpulse.so.0.18.2:

k@bucket:~$ ps -ef | grep iceweasel
k        17318     1  5 18:58 tty2     00:00:15 iceweasel
k        17498  1879  0 19:03 pts/0    00:00:00 grep iceweasel
k@bucket:~$ sudo pmap 17318 | grep -i pulse
00007fee08377000  65540K rw-s- pulse-shm-2442253193
00007fee0c378000  65540K rw-s- pulse-shm-3156287926
00007fee11d24000    500K r-x-- libpulsecommon-7.1.so
00007fee11da1000   2048K ----- libpulsecommon-7.1.so
00007fee11fa1000      4K r---- libpulsecommon-7.1.so
00007fee11fa2000      8K rw--- libpulsecommon-7.1.so
00007fee121af000    316K r-x-- libpulse.so.0.18.2
00007fee121fe000   2044K ----- libpulse.so.0.18.2
00007fee123fd000      4K r---- libpulse.so.0.18.2
00007fee123fe000      4K rw--- libpulse.so.0.18.2

libpulse *にリンクしている実行中のプロセスを確認できます。たとえば、最初にlibpulse *共有オブジェクトのリストを取得してから、それぞれでlsofを実行します(注:これはDebian Stretch(テスト)からのものであるため、出力が異なる場合があります)。

sudo find / -type f -name "*libpulse*"
*snip*
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsedsp.so
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
/usr/lib/x86_64-linux-gnu/libpulse.so.0.18.2
/usr/lib/x86_64-linux-gnu/libpulse-simple.so.0.1.0
/usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0.0.5
/usr/lib/libpulsecore-7.1.so
/usr/lib/ao/plugins-4/libpulse.so

sudo lsof /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
COMMAND     PID       USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
gnome-she   864 Debian-gdm mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set   965 Debian-gdm mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set  1232          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-she  1286          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
chrome     2730          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
pulseaudi 18356          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so

これらのプロセスがPulseAudioを自動生成しないようにするには、〜/ .config / pulse / client.confを編集して行を追加します

autospawn = no

PulseAudioとそのライブラリは、一般的にその設定を尊重します。

実行中のプロセスによるlibpulse *リンクは、PulseAudioが非常に速く再生成する理由も示す場合があります。FreeDesktop.orgページ「Running PulseAudio」は、これを確認しているようです:

「...通常、一部のバックグラウンドアプリケーションはすぐに再接続し、サーバーがすぐに再起動します。」

コンソールから(xinitを実行して)i3ウィンドウマネージャーを起動し、ディスプレイマネージャーやデスクトップ環境を使用しないことを示しているようです。この回答の残りの部分では、GNOME、KDEなどを使用しているユーザーの情報を詳しく説明します。

GNOME / KDEの自動起動に関する追加情報

Debian Jessie(安定版)amd64のPulseAudioパッケージ(5.0-13)は、次の4つのシステムファイルをインストールします

  1. /etc/xdg/autostart/pulseaudio-kde.desktop
  2. /etc/xdg/autostart/pulseaudio.desktop
  3. / usr / bin / start-pulseaudio-x11
  4. / usr / bin / start-pulseaudio-kde

一部のグラフィカルセッションマネージャーは、ユーザーのログイン時にFreeDesktop.org自動起動スクリプトを自動的に実行します。次に、PulseAudio自動起動スクリプトは、適切なPulseAudio起動スクリプトを実行するようにグラフィカルセッションマネージャーに指示します。

/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde

これらのスクリプトはPulseAudioクライアント/ usr / bin / pactlを呼び出してPulseAudioモジュールをロードし、PulseAudioサーバーを副産物として生成します(注:autospawnを「no」に設定している場合、pactlはそれを尊重し、PulseAudioサーバーを自動生成しません)。

詳細については、FreeDesktop.orgページの「Running PulseAudio」を参照してください。

さらに、他のディストリビューションのディスプレイマネージャーによっては、PulseAudio(ArchLinuxのSDDMなど)を起動する場合があります。メンテナーはこれを解決しているかもしれませんが)。


4

Pulseaudioは小さなデーモンです。man pulseaudioコマンドでそれをオフにできると言いますが、それをpulseaudio --kill行うと再び復活します-それはそれ自身を復活させます。通常のinitスクリプトは、起動時に起動するためにあります/etc/rc2.d/S50pulseaudio。しかし、これを通常のLinuxの方法で制御しようとしても、実行/etc/init.d/pulseaudio stopしても停止しないため、機能しません。削除/etc/rc2.d/S50pulseaudioしても、起動時に起動が妨げられることはありません。

そのリスポーン習慣を停止するには、を開き/etc/pulse/client.conf、に変更autospawn = yesautospawn = no、daemon-binaryをに設定します/bin/true。次のように、これらの行のコメントを外してください。

 autospawn = no
 daemon-binary = /bin/true

これで、通常のLinuxスタートアップファイルを処理できます。最初に削除し/etc/rc2.d/S50pulseaudioます。または、このコマンドの名前をkillコマンドに変更することもできます。これにより、再度必要になった場合に備えてリンクが保持されます。

$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio

または

不要なスタートアップファイルがもう1つあります/etc/X11/Xsession.d/70pulseaudio。これは、Gnomeセッションの開始時にPulseを開始します。保存したい場合は削除するか、別のディレクトリにコピーして、正確なファイル名を再度確認してください。PulseAudioを起動するスクリプトを見つけたときに役立つテクニックは、それらが呼び出すバイナリをに変更する/usr/bin/pulseaudioこと/bin/trueです。これは素敵な小さな実行可能ファイルであり、その唯一の仕事は「何もしない、成功する」ことです。スクリプトを快適に保ち、元に戻す場合に便利なプレースホルダーです。

すべての起動スクリプトと再生成スクリプトを削除したので、次のコマンドを使用してパルスオーディオを停止および開始します。

 $ pulseaudio --kill
 $ pulseaudio --start

1
それは少し助けになりますが、実際にはまったく質問に答えません。私のシステムでPulseAudioが最初にどのように/どこで/なぜ起動するのかまだわかりません。Debian 8はsystemdを使用しており、私が言ったsystemctl list-units -aようにPulseAudioは含まれていません。xinitは/etc/X11/Xsession.d、前述のとおり、PulseAudioを含まないスクリプトを起動します。
ウブロ

pulseaudioプロセスの親プロセスは何ですか?
ゆえに

1
この回答のテキストは、Carla Schroderによる2010年の記事linuxplanet.com/linuxplanet/tutorials/7130/2から来ているようです。この指示は、Debian JessieおよびPulseAudio(5.0-13)には適用されなくなったようです。
iokevins

0

Thenhi / Carla Schroderによる回答(次の回答を参照)は、debian wheezyからjessieへのアップグレード後も引き続き正常に機能します。ブートメッセージを調査した後、次のエラーが発生しました(エラーは最後の行にリストされています)。

root@voylinx:/etc#journalctl -b | grep pulseaudio
Dez 31 16:19:46 voylinx rtkit-daemon[1507]: Successfully made thread 1506 of process 1506 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1526 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1527 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1528 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1533 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:50 voylinx rtkit-daemon[1507]: Successfully made thread 1548 of process 1548 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:50 voylinx pulseaudio[1548]: [pulseaudio] pid.c: Daemon already running.

pulseaudio-daemonは2回開始されました。rtkit-daemonが1回、GNOME / KDE AUTOSTARTまたは他のアプリが1回。とにかく/etc/pulse/client.confの設定

autospawn = no
daemon-binary = /bin/true

私の問題を解決しました。私が確認できない唯一のことは、/ etc / rcX.dディレクトリに起動スクリプトがないことです。rtkit-daemonがsystemdの相互作用でジョブを実行するため、かなり明確です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.