GNU/Linux >> Linux の 問題 >  >> Linux

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

共有オブジェクトの 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 つのシステム ファイルをインストールします。

<オール>
  • /etc/xdg/autostart/pulseaudio-kde.desktop
  • /etc/xdg/autostart/pulseaudio.desktop
  • /usr/bin/start-pulseaudio-x11
  • /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。メンテナーはこれを解決している可能性がありますが、今では)。


    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
    

    Linux
    1. プログラミング言語の学習を開始する方法

    2. スティッキービットはどのように機能しますか?

    3. Pulseaudioで仮想出力を作成する方法は?

    1. Jack Vs Pulseaudio —どのくらい速いですか?

    2. 「chmod -R 755」はどのように機能しますか

    3. 独自のプロセスグループでプロセスを開始する方法は?

    1. Awkの「!a [$ 0] ++」はどのように機能しますか?

    2. Ssh – Tcp-keepaliveはSshでどのように機能しますか?

    3. LinuxでTomcatサーバーを起動するには?