Pulseaudio 1.12 と alsa-lib 1.1.9 で Pulseaudio が動かない件への対処法

読了まで:約2分


どういう​問題が​起きていたか

つい​先日 [[Dell XPS 9560]] に​入っていた​ [[Windows 10 Pro]] を​削除した​関係で、​ [[NixOS]] を​ nixpkgs の​ master ブランチの​定義で​再インストールしたんですが、​ その際、

  • Pulseaudio 1.12
  • alsa-lib 1.1.9

と​言う​組み合わせに​なった​結果、​Pulseaudio の​ module-alsa-card が​機能しなくなる、​ と​言う​事態に​遭遇し、​マシンから​音が​まったく​出ないと​言う​状態に​なっていました。

なぜ​その​様な​問題が​起きていたか

alsa-lib の​ API ​(と​言うかヘッダの​位置)が​変わり include すべきファイルが​変わった​結果、​ 本来ならリンクされているべき Shared Library への​ Symbol が​ Undefined Symbol に​なっていた、​ と​いうのが、modules-alsa-card​ が​動かなくなった​原因っぽいです。

どうやって​直したか

に​記載されていた、​下記の​パッチを​適用して​なんとかしました​:

sed -i "s:asoundlib.h:alsa/asoundlib.h:" src/modules/alsa/*.{c,h} &&
sed -i "s:use-case.h:alsa/use-case.h:" configure.ac &&
sed -i "s:use-case.h:alsa/use-case.h:" src/modules/alsa/alsa-ucm.h

な​お NixOS の​パッケージ定義では​下記の​様な​ファイルを​用意し、​ これを​ nixpkgs.overlays 経由で​読み込んで​対処しました​:

self: super: let
  require = path: args: super.callPackage (import path) args ;
in {
  pulseaudio = super.pulseaudio.overrideAttrs (old: rec {
    # copied from http://www.linuxfromscratch.org/blfs/view/svn/multimedia/pulseaudio.html
    preConfigure = ''
      sed -i "s:asoundlib.h:alsa/asoundlib.h:" src/modules/alsa/*.{c,h}
      sed -i "s:use-case.h:alsa/use-case.h:" configure.ac
      sed -i "s:use-case.h:alsa/use-case.h:" src/modules/alsa/alsa-ucm.h
    '' + old.preConfigure;
  });
}

注意点

上記の​ nixpkgs の​ overlays は​様々な​パッケージが​依存している​ pulseaudio パッケージを​上書きする​関係上、​問答無用で​様々な​パッケージが​再コンパイルに​なります。

つまり、​コンパイル時間を​めっちゃ消費する​ Chromium だとか​ QtWebKit だとか​ QtWebEngine だとか​ wine だとかもリコンパイルに​なるので、​時間の​無い​ときに​その​辺りの​パッチを​当てたりすると、​ コンパイルが​いつまで​経っても​終らない​コトに​なります。​な​お自分の​環境では​ 5 時間ぐらいは​掛かりました。

以上

とりあえず​ pulseaudio 側の​ #include の​パスを​変更しただけで​なんとか​なったんで​良かったんですが、​ これが​他の​要因だったら​多分​対処できなかった​様に​思います。

あと​他の​ Linux Distro で​この​問題に​ブチ当たった​場合、​ 上記パッチを​当てた Pulseaudio と​インストール済み Pulseaudio を​入れ替えるだけで​直る​ハズなので、​ その​辺りは​ NixOS よりかは​楽だと​思います。​ ただしそれでも​コンパイルは​必要なんで​面倒っちゃ​あ面倒ですけどね。

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。