PulseAudioは常に私のシステムで実行されており、クラッシュまたは強制終了した場合は常に即座に再起動します。ただし、実際にはstart PulseAudioは使用しません。
確認しました /etc/init.d/
および/etc/X11/Xsession.d/
、私はチェックしましたsystemctl list-units -a
、およびPulseAudioが見つかりません。
どうしてPulseAudioは、私が実行することなく、それ自体が魔法のように自然に開始するのでしょうか。
私はDebian 8(jessie)をxinitとi3ウィンドウマネージャ、およびPulseAudio 5とともに使用しています。
共有オブジェクトの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つの システムファイル をインストールします。
一部のグラフィカルセッションマネージャーは、ユーザーログイン時に 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 。メンテナーはこれを現在解決している可能性があります)。
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 = yes
をautospawn = 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
に変更することです。これは、「何もせず、成功する」ことが唯一の仕事である素敵な小さな実行可能ファイルです。スクリプトを幸せに保ち、元に戻す場合に便利なプレースホルダーです。
起動スクリプトと再起動スクリプトをすべて削除したので、以下のコマンドを使用してPulseオーディオを停止および開始します。
$ pulseaudio --kill
$ pulseaudio --start
これはまだ有効な質問ですが、その答えは時間とともに変化しました。 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プロセスを停止してすぐに新しいインスタンスを起動しないようにするには、systemctl --user stop
を使用します。
$ systemctl --user stop pulseaudio.service pulseaudio.socket
ログイン時に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
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
を使用する必要があると推測するのは簡単です。
このため、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の相互作用で仕事をするので、かなり明確です。