0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pulseaudioからpipewireへの引っ越し

0
Posted at

概要

筆者の自宅で動いているサーバを更新するにあたり、Linuxのアップグレードを実施した。アップグレード直後から PipeWire がマシン全体で適用されてしまっており、従来の PulseAudio との間でポートやリソースの競合が発生していた。
そのため、今回利用していた PulseAudio から PipeWire への完全な移行を実施する。
PipeWire は PulseAudio 互換レイヤー(pipewire-pulse)を備えているため、ホスト側の設定を適切に入れ替えるだけで、クライアント(Docker等)側の変更を最小限に抑えて解決できる。

環境

  • OS: Linux (Ubuntu 24.04 / Debian系 等、PipeWire標準採用のディストリビューション)
  • Audio Server: PipeWire (wireplumber / pipewire-pulse)
  • Container: Docker (Python / PyAudio)
  • Tools: pulseaudio-utils (pactl)

発生していたエラー

  • pulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon実行後、 pulseaudio --checkを実行してもデーモンが立ち上がっていない。
  • にもかかわらず、E: [pulseaudio] pid.c: Daemon already running.E: [pulseaudio] main.c: D-Bus name org.pulseaudio.Server already taken. が発生する
  • ps aux | grep pipewireを実行すると、以下のような結果が出る。
app-pulseaudio@autostart.service             generated -
pipewire-pulse.service                       enabled   enabled
pulseaudio-x11.service                       static    -
pulseaudio.service                           enabled   enabled
pipewire-pulse.socket                        enabled   enabled
pulseaudio.socket                            enabled   enabled

ツールの入れ替え方法

  1. 既存の PulseAudio を完全にクリーンアップ
    PipeWireとの衝突を避けるため、旧来のデーモンを削除し、残存しているPIDファイルやソケットを掃除。

    $ sudo apt purge -y pulseaudio
    $ sudo apt autoremove -y
    $ rm -rf ~/.config/pulse /run/user/$(id -u)/pulse
    
  2. pulseaudio-utilsが無いと、pactlが利用できないため、インストール。

    $ sudo apt install pavucontrol pulseaudio-utils
    
  3. デーモンの起動と確認

    $ pactl load-module module-native-protocol-tcp auth-anonymous=1 listen=0.0.0.0
    $ ss -antl | grep 4713
    
    LISTEN 0      32           0.0.0.0:4713       0.0.0.0:*   
    
  4. docker側に掴んでもらうため、docker-compose.ymlに以下を追記

    ...
        environment:
          ...
          - PULSE_SERVER=172.17.0.1
        extra_hosts:
          - "host.docker.internal:host-gateway"
    

所感

当初は PulseAudio の再起動で解決を試みたが、OS標準の PipeWire がシステム全体を統治している環境では、無理に旧来のデーモンを維持するよりも、PipeWire の互換機能を活用する方が楽です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?