共有オブジェクトの libpulse* ファミリにリンクするプロセスは、X および i3 ウィンドウ マネージャーを実行する前または後に、オーディオ サブシステムとのインターフェイス試行の副産物として、ユーザー プロセスの下で暗黙的に PulseAudio サーバーを自動生成する可能性があるようです。 . PulseAudio の作成者である Lennart Poettering は、systemd-devel メーリング リストへの 2015 年 5 月 29 日の電子メールで、これを確認しているようです:
<ブロック引用>「pulseaudio は通常、システム サービスではなく、ユーザー サービスです。ユーザー セッションが systemdtoo によって管理されるように完全に変換されない限り (これはありそうにありません)、systemd は起動にまったく関与しません。
「PA は通常、セッション セットアップ スクリプトまたはサービスから開始されます。Gnome では、たとえば gnome-session です。ライブラリが使用されている場合は自動生成オンデマンドでもあり、それが欠落していることに注意してください。」
たとえば、Debian Stretch (テスト中) では、Web ブラウザー IceWeasel は 2 つの libpulse* 共有オブジェクトにリンクします。1) libpulsecommon-7.1.so。および 2) libpulse.so.0.18.2:
[email protected]:~$ 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
[email protected]:~$ 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 つのシステム ファイルをインストールします。
<オール>一部のグラフィカル セッション マネージャーは、ユーザー ログイン時に 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。メンテナーはこれを解決している可能性がありますが、今では)。
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
を使用する必要があることは容易に推測できます。
Pulseaudio は小さなデーモンです。 man pulseaudio
コマンド pulseaudio --kill
でオフにできると言います しかし、それを行うには再び再生が必要です。それ自体が再生されます。 /etc/rc2.d/S50pulseaudio
の起動時に起動する通常の init スクリプトがあります。 .しかし、これを通常の Linux の方法で制御しようとすると、 /etc/init.d/pulseaudio stop
を実行しているため、機能しません。 止めません。 /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
へ .これは、"何もせずに成功する" ことだけが仕事である素敵な小さな実行可能ファイルです。スクリプトを快適に保ち、元に戻したい場合に便利なプレースホルダーです。
すべての起動スクリプトと再生成スクリプトを削除したので、次のコマンドを使用してパルス オーディオを停止および開始します。
$ pulseaudio --kill
$ pulseaudio --start