pipewire化してみた(ubuntu22、PiOS bookworm)
はじめに
ubuntu22のpulseaudioで、「avoid-resampling = yes」を設定に書いているにも関わらず、いつのまにか、resampleされるようになってしまったので、pipewireにしてみんとて、です。
pulseaudioで解決しようとしてみたが、
pulseaudioで解決しようアレコレやってみたが、「default-sample-rate = 192000」を設定したところ、192kHzなwavを再生時、resample (null)となるが、そうすると、xrdp上のオーディオ転送がうまくいかず、両立せず。
やはり、sample rateは出力先毎に、
おま環ではあるのだと思うが、自分の手持ちのDAC(AKMが主、時々ESSとか旧BB(PCM-xxx))だと、44.1kHzや48kHzより高い、特定のサンプルレートで投げたほうが、出音がいいような気がするため、意図したサンプルレートで投げるのは諦めたくない。
というのも、ΣΔなDAC、測定上の数値向上のために、前処理として、ディサリングとかオーバーサンプリングしているようだが、これがサンプルレートによって動作が微妙に違うのか(ブラックボックスでかつチップの内部のため、確かめるのが難しい)、出音が違うような感じがする。(Audacityとかffmpegでいじる場合も、ditherを切ったりすると明らかに音が変わるので、その可能性ありや?)
PiOS bookworm onラズパイ3B plusでも似たようなことになっていたので、pipewire化、まずは、PiOS bookwormから着手。
PiOS bookworm
まずは、aptで、
ネットをみると、PiOS bookwormでは、aptで拾える版のパッケージで対応できそうなので、まずは、aptで対応。
sudo apt install pipewire-audio pipewire-pulse pipewire-alsa libspa-0.2-bluetooth wireplumberで、systemctlで、
systemctl --user disable pulseaudio
systemctl --user enable --now pipewire pipewire-pulse wireplumberUSB-DAC向かいを192kHzにすべく「/usr/share/pipewire/pipewire.conf」を変更。
## Properties for the DSP configuration.
#default.clock.rate = 48000
#default.clock.allowed-rates = [ 48000 ]の下に、
default.clock.rate = 192000
default.clock.allowed-rates = [ 192000 ]を追加。
pw-topを見ているとそれらしく動いている様子。
pipewire-module-xrdpを拾ってきて野良ビルド
完全にpipewireベースにしてしまったので、今の状態だと、RDP接続したときに、オーディオが転送できない。
ということで、pipewire-module-xrdpをビルドしたいが、その前にaptでいくつか必要となるパッケージを拾ってくる。
sudo apt install pipewire-bin libpipewire-0.3-dev libspa-0.2-dev
sudo apt install autoconf automake libtool pkg-configで、pipewire-module-xrdpのgithubサイトからgit clone、ビルド。
git clone https://github.com/neutrinolabs/pipewire-module-xrdp.git
cd pipewire-module-xrdp/
./bootstrap
./configure
make
sudo make installPiOS on ラズパイでは、xrdp/xorg.confで、DRMDevice関係を修正しておかないとハマる[1]ようなので、修正。
[1] https://zenn.dev/haru_iida/articles/raspberrypi_xrdp_fix
# Option "DRMDevice" "/dev/dri/renderD128"
Option "DRMDevice" ""これで、めでたく、「wpctl set-default」でxrdpに向けると44.1kHzで、USB-DACに向けると192kHzで投げてくれる環境ができた。
ubuntu22
とりあえず、aptで引っ張ってこれる範囲で、pipewire化してみた。
sudo apt install pipewire pipewire-pulse wireplumber
systemctl --user disable pulseaudio
systemctl --user enable --now pipewire pipewire-pulse wireplumberここで、PCを再起動。
pulseaudioはon pipewire化されて、mplayer等でpulseaudioに投げると、pw-topで出てくるのだが、alsaで投げると、出てこない。
もしかして、alsaはon pipewireではなく、nativeで稼働しているのか?
あと、RDP接続すると、やはりxrdp-sinkとかが使えなくなっている。
「pavucontrol」の候補にも出てこない。
pipewire-module-xrdpを拾ってきて野良ビルド、でハマる、
pulseaudioからpipewireに変えてしまったため、xrdpのオーディオ転送がNGとなってしまった様子。
そのため、PiOS bookworm同様、pipewire-module-xrdpをビルドしてみる。
sudo apt install libpipewire-0.3-dev
sudo apt install libspa-0.2-dev
mkdir ubuntu22-pipewire
cd ubuntu22-pipewire/
git clone https://github.com/neutrinolabs/pipewire-module-xrdp.git
sh ./bootstrap
sh ./configure「libpipewireが0.3.58より古い」、とconfigureに怒られる。
試しに、バージョンチェックを無理やりskipすると、ビルド時に、「spa/utils/dll.h」がないと怒られる。
PiOS bookwormでは、libspaパッケージにある様子。
pipewireを拾ってきてビルド
aptで拾えるのより新しい版のlibspaを拾ってきて野良ビルドしなくては、とネットを調べると、pipewireそのものを拾ってきてのビルド&インストールとなるらしい。
pipewireの0.3.58というaptの0.3.48より新しいのをlaunchpadなページで見つけたので、とりあえず、lanuchpadから拾ってくる。
origでないtar.xzは、どうも、ubuntuの差分っぽいので、今回は無視。
mkdir ubuntu22-libspa
cd ubuntu22-libspa/
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/pipewire/0.3.58-2ubuntu1/pipewire_0.3.58.orig.tar.bz2
tar xvf pipewire_0.3.58.orig.tar.bz2で、野良ビルド&インストール。
cd pipewire-0.3.58/
meson setup builddir
meson configure builddir
sudo meson install -C builddirsystemctlとかの依存関係が面倒くさそうなので、ここは、素直に、PCを再起動。
再度、pipewire-module-xrdpをビルド
ようやっと、本題の、pipewire-module-xrdpのビルドに。
cd ubuntu22-pipewire/
sh ./bootstrap
sh ./configure
make
sudo make installこんどは、すんなり、configureが終わったので、「make」、「make install」。
念のため、PCを再起動。
pavucontrolで、出力先を変更したり、出力先の音量は制御できるように。もちろん、wpctlでデフォルトの出力先の変更もできるように。
alsaの方も、pw-topで確認すると、pipewire経由になるようになった。
youtubeの動画 on Chromeも、xrdp-sinkに出力できて、44.1kHzで出ることを確認。

余談だが・・・
ubuntu22を動かしているPC、「ubuntu24.04が準備できたので、あげなさい」的なメッセージが出ているので、ubuntu24.04にあげれば、面倒なことをしなくても、PiOS bookwormのとき同様にほぼaptで解決するのだは思うが、このPCはしばらくは22.04で動かしたいので、当面はこのまま。
おわりに
無事、pipewire化できて、xrdp経由のオーディオ転送が再度OKに、xrdp向かいは44.1kHz、USB-DAC向かいは192kHzと打ち分けられるようになりました。
この投稿が、同様のことでつまづいている人の一助になれば幸いです。
20250801追記
「setxkbmap us」を唱えないとJP配列になってしまうJP問題再発?と思っていたら、上記の「pipewire-module-xrdp」の「make install」でどうも「xrdp_keyborad.ini」が書き換わっていたのに気がついた。
自身の備忘録[A1]を見ながら、「xrdp_keyborad.ini」を再修正して、様子見。
[A1] https://note.com/cammi_wart/n/na5e500f881ae
