web-dev-qa-db-ja.com

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

PulseAudioは常に私のシステムで実行されており、クラッシュまたは強制終了した場合は常に即座に再起動します。ただし、実際にはstart PulseAudioは使用しません。

確認しました /etc/init.d/および/etc/X11/Xsession.d/、私はチェックしましたsystemctl list-units -a、およびPulseAudioが見つかりません。

どうしてPulseAudioは、私が実行することなく、それ自体が魔法のように自然に開始するのでしょうか。

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

20
Hubro

共有オブジェクトの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 AUTOSTARTの追加情報

パッケージPulseAudio(5.0-13)は、Debian Jessie(Stable)AMD64で、次の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はそれを尊重しますnotautospawn PulseAudio server)。

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

加えて、また他のディストリビューションでは、一部のディスプレイマネージャーがPulseAudioを開始する場合があります(たとえば、 SDDM、ArchLinux 。メンテナーはこれを現在解決している可能性があります)。

16
iokevins

Pulseaudioは小さなデーモンです。 man pulseaudioは、コマンドpulseaudio --killを使用してオフにすることができると述べていますが、これを行うと、再生が再度行われます-再生成されます。通常のinitスクリプトは、ブート時に開始するためのものです/etc/rc2.d/S50pulseaudio。ただし、/etc/init.d/pulseaudio stopを実行しても停止しないため、これを通常のLinuxの方法で制御しようとしても機能しません。 /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

OR

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

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

 $ pulseaudio --kill
 $ pulseaudio --start
4
Thushi

PulseAudioはどのように使い始めますか?

これはまだ有効な質問ですが、その答えは時間とともに変化しました。 PulseAudioはユーザーのsystemdによって自動的に起動されており、ユーザーのログイン時にシステムのsystemdによって起動されたため、以前の回答は不十分または正しくありません。

$ systemctl --user status pulseaudio
● pulseaudio.service - Sound Service
   Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor pre
   Active: active (running) since Tue 2020-03-14 15:29:56 ZULU; 13s ago
 Main PID: 31080 (pulseaudio)
   CGroup: /user.slice/user-1000.slice/[email protected]/pulseaudio.service
           ├─31080 /usr/bin/pulseaudio --daemonize=no
           └─31081 /usr/lib/x86_64-linux-gnu/Pulse/gsettings-helper

PulseAudioを終了するには

PulseAudioプロセスを停止してすぐに新しいインスタンスを起動しないようにするには、systemctl --user stopを使用します。

$ systemctl --user stop pulseaudio.service pulseaudio.socket

PulseAudioを無効にするには

ログイン時にPulseAudioが自動的に起動しないようにするには、次のようにして無効にできます。

$ systemctl --user disable pulseaudio.service pulseaudio.socket

(ちなみに、無効にした場合でも、systemctl --user startを使用して、必要なときにPulseAudioを起動できます。)


一般的な質問に答える

上記のコマンドで十分です。ただし、自分で解決策を理解する方法に興味がある場合は、読み続けてください。

サウンドカードが開いているプロセスを確認するには

lsofまたはfuser -vコマンドを使用して、デバイスファイルが開いているプロセスを確認します。

$ lsof /dev/snd/*
COMMAND     PID USER      FD   TYPE DEVICE SIZE/OFF  NODE NAME
pulseaudi 32768 hackerb9  3u   CHR  116,5       0t0 15499 /dev/snd/controlC0

PulseAudioを起動したプロセスを確認するには

pstree -sを使用して、親プロセスを次のように表示します。

$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
                                              │                        ├─{gsett+
                                              │                        └─{gsett+
                                              └─{pulseaudio}(32773)

それを使用して、PulseAudioが実際に自分のアカウントで実行されているsystemd(PID 738)のインスタンスによって起動されていることを確認しました。

$ ps -fp 738
UID        PID  PPID  C STIME TTY          TIME CMD
hackerb9   738     1  0 Feb10 ?        00:00:00 /lib/systemd/systemd --user

そこから、停止するためにsystemctl --userを使用する必要があると推測するのは簡単です。

1
hackerb9

このため、Debian wheezyからjessieへのアップグレード後も、Sothi/Carla Schroder(次の回答を参照)の回答は問題なく機能します。ブートメッセージを調査した後、次のエラーが発生しました(エラーは最後の行に表示されています)。

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回起動されました。 1回はrtkit-daemonによって、もう1回はGNOME/KDE AUTOSTARTまたは他のアプリによって。とにかく/etc/Pulse/client.confの設定

autospawn = no
daemon-binary = /bin/true

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

0
FalkH