WSL上で音楽を再生する
WSL上で音楽を再生するコマンド(例えばmplayer)がうまく動作しない。Ubuntu 16.04LTSの場合、ここに書いてある手順でライブラリを差し替えたらうまく動作するようになった。
- libpulse0を差し替える(libpulse0_8.0-0ubuntu3.3ppa1_amd64.deb)。
- Windowsホスト上のpulse serverを指定する(PULSE_SERVER=tcp:localhost)。
Ubuntu 18.04LTSではpulseaudioのベースバージョンが上がっていて16.04LTS用のバイナリは適合しない。18.04LTS用のlibpulse0バイナリは見つけられなかったので以下の手順で自作した。tarballやrpmのリビルドには慣れているけどdebをリビルドしたのは今回が初めてで、数日間試行錯誤した。変な手順になっているかもしれない。
# apt install build-essential pbuilder # apt install build-dep pulseaudio
- gpgキーを作成して登録(gpg, apt-key)。
- pulseaudioのソースパッケージをダウンロード。
$ apt source pulseaudio
- debian/patches/pulseaudio-11.1-libpulse0-for-wsl.patchを追加。
--- pulseaudio-11.1/src/pulsecore/mutex-posix.c.org 2016-08-23 21:50:11.000000000 +0900 +++ pulseaudio-11.1/src/pulsecore/mutex-posix.c 2018-11-19 15:52:54.056000000 +0900 @@ -21,6 +21,8 @@ #include <config.h> #endif +#undef HAVE_PTHREAD_PRIO_INHERIT + #include <pthread.h> #include <errno.h>
- debian/patches/seriesの末尾に以下を追加。
# Windows Subsystem for Linux pulseaudio-11.1-libpulse0-for-wsl.patch
- pulseaudioをリビルドする。
$ debuild -S -rfakeroot -kXXX $ debuild -rfakeroot -kXXX
- リビルドしたlibpulse0パッケージをWSLにコピーして差し替え、更新を禁止する。
# dpkg -i libpulse0_11.1-1ubuntu7.1_amd64.deb # apt-mark hold libpulse0
これでUbuntu18.04LTSでもmplayerが使えるようになった。