11/26/2022

[note] Ubuntu22.10へのアップグレードでオーディオの不具合に遭遇

した件についてメモ。

しばらくぶりのUbuntuのアップグレード。今回は22.04LTSから22.10への移行になります。コードネームはKinetic Kudu。Kuduはレイヨウの一種でヤギとか牛の親戚ですね。ともあれいつもの通り、リリースからしばらく待って、特に大きな不具合は報告されていないらしいと判断してから実行したのです。結果としてこれが間違いだったわけですが。。。

アップグレード自体は特に問題もなく完了しました。が、いつもの通り日本語入力やらブラウザやら一通り動作確認をしていたところ、オーディオ周りに不具合が発生している事が判明してしまったのですね。

具体的には、動画の閲覧や音楽ファイルを再生する際、ブラウザやmplayer等が止まるのです。アプリ自体が完全にフリーズするのではなく、再生前の初期化が終わらないような感じで、そこから先に進まなくなるのです。不可解なのは、pulseaudioのコントロールパネルを開くと再生されたりされなかったり挙動が一貫しない点です。ブラウザ(firefox)で動画サイトを閲覧する場合には、動画を閉じてもサウンドデバイスがリリースされないらしく、pulseaudioのパネルにどんどんfirefoxのエントリが増えていって、処理が(恐らくは)スタックする事象も起こりました。

日常の利用に甚大な支障をきたすであろう致命的な不具合です。これはいかん、とすぐさま対処方法を調査する事に。しかし、同様の不具合の報告はなく、わずかに22.10にアップグレードした場合にbluetoothの再生デバイスが動作しなくなる、という報告が見られた位でした。

一ヶ月経っているのにこれだけ報告がないという事はおま環案件の可能性が高いかも、と愕然としつつ、対処しないわけにもいかない、という事で、22.10でのオーディオ周りの変更点から調査を再開。すると、長らくlinuxの標準オーディオサーバとして採用され続けて来たpulseaudioが廃止され、pipewireに置き換えられるという大変更がなされていた事をここで初めて認識しました。もしかしなくてもこれが原因であることは明白です。事前に知っていればもうちょっと警戒したのですが、と言っても後の祭り。リリースノートとかはちゃんと読みましょう。。。

ただ、pipewireに置き換えられた、と言っても、現状linux上では大半のアプリ等がpulseaudioを前提として構築されていますから、例によってpulseaudioのラッパーを被せる形で導入されているわけで、本来は従来と同様に動作するし、ユーザーが気にする必要はなかった筈です。それが不具合を起こしている、という事は、このラッパー周りかそれと応答するpipewireのインタフェース部分あたりに不具合があるという事か、というところまでは容易に推測出来ました。

しかし、設定ファイル等も確認してみても、特段の問題点も見つかりません。そもそも設定ファイルとかいじれるところが殆ど無いのですね。仕方がない、こういう時は再インストールだ、という事でpipewireを入れ直してみました。具体的には下記の通り。

まず、上記bluetooth関連不具合の報告中にあったライブラリの内、22.10のデフォルトでは入っていなかったpipewire-audio-client-librariesを入れます。

$ sudo apt install pipewire-audio-client-libraries 

次いで、サービス類の設定をやり直し。

$ systemctl --user --now disable pulseaudio.{socket,service}
$ systemctl --user mask pulseaudio
$ systemctl --user --now enable pipewire{,-pulse}.{socket,service}

オーディオサーバーの状態表示コマンド $ pactl info  で以下のようになっていればOK。

サーバー名: PulseAudio (on PipeWire 0.3.58)

もしなっていなければ、pipewireモジュールの入れ直しからやり直しになるでしょう。むしろ中途半端に設定の書き換えからするより、最初からやり直した方がいいのかもしれませんね。

ともかく、私の環境だとこれである程度改善したのです。ただ、残念ながらまだ不具合は残っていました。何かというと、何故かpulseaudioのコントロールパネルを開くまで再生が停止するのです。パネルを開くと再生が即始まる。わけがわかりません。オーディオサーバの方で何か応答が止まる部分があって、それがパネルを開く際に解除されるのでしょうけれども、それが何かも不明。PCを再起動しても駄目。意味不明な現象を前に、ここでああでもないこうでもないと迷走することしばし、最終的に、pipewireを再起動すると治りました。下記コマンド。

$ systemctl --user restart pipewire

これで、再生毎にpulseaudioのパネルを開く必要もなく、pulseaudioのエントリが無限増殖する事もなく、以前と同様にオーディオが動作しました。いつも通りに動くってありがたい事なのですね。。。

しかし久しぶりですこの新機能特有のわけのわからないバグり方とその治り方。こういう、不具合の原因もわからないけれど再起動したら治りました、だと、根本的には全く治っていないものとしか思えないし、これからしばらくオーディオ絡みで同様の不具合に悩まされるのだろうかと思うとげんなりせざるを得ないのですが、もう考えても仕方ないし、諦めましょう。

ともかくも、ひとまずはこれでおしまい。お疲れ様でした。