pulseaudioなしでFirefox52で音声を再生する: apulseを使う (追記あり)

公開: 2017-03-14, 更新: 2017-07-04, 更新: 2018-04-29

はじめに

Linux上のFirefoxは 52からpulseaudio経由でないと音が出なくなりました。Jackなど他のサウンドサーバーもあるのに特定のサウンドサーバーを決め打ちなのは、どうかと思います。とはいえ、pulseaudioが無くてもFirefoxでも音を出せるようにしなければ、他のブラウザに乗り換えるしかありません。

apulse

ALSAでpulseaudioをエミュレートしてくれるapulse があります。今回はこれを使ってみました。

インストールは簡単です。Debian パッケージはないので自分でコンパイルします。

  1. ソースをapulseのgithub からもらってきます。
  2. ソースをunzipして
    $ mkdir build && cd build
    $ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
    $ make
    $ sudo make install
    
    を実行します。
  3. Firefoxを起動するには
    $ apulse firefox
    
    とします。

(追記) Firefox54以降ではsandoboxのエラーが出るため次の設定が必要

Firefox54以降ではsandboxのエラーが出ます。

そのためFirefoxで次のような設定が必要です( aplulseのREADME.md から):

  • about:config"security.sandbox.content.write_path_whitelist" /dev/snd/を指定する

    これはFirefoxがセキュリティのためにsandbox(制限された権限内で JavaScript コードを実行することを許可するオブジェクト)を設けて、ファイルアクセスを制限しているためです。アクセスを許可するリストにALSAのdeviceが含まれていないため、上記のパラメタに設定しています。

  • さらにFirefox58以降では

    about:configsecurity.sandbox.content.syscall_whitelist 16を指定する(これはx86_64のアーキテクチャの場合。 x86, ARMの場合は54を指定する。)

    README.mdによればFirefox58ではsandboxがさらに厳しくなったようです。ALSAが使っている ioctl() callが禁止されているため、このままではapulseが使えません。例外を指定するために、上記のパラメタで設定しています。

参考: Firefox 52以降でALSAを使う

おまけ: fbpanel

私はランチャーにfbpanelを使っています。launchbarのconfigは

        button {
            image = /usr/local/share/firefox/browser/chrome/icons/default/default32.png
            tooltip = Web Browser
            action = apulse firefox
    	}
で動きます。

追加のおまけ: XMODIFIERS=@im を使う場合

XMODIFIERS=@imを使う場合は、以下のようにします。下はfcitxを使う例です:

XMODIFIERS=@im=fcitx apulse firefox  &

おわりに

pulseaudioのflame warがネット上では起こっているようです。 しかし大多数の人はpulseaudioを使っているようで、pulseaudioを敢えて使わない人は非常に少数なのでしょう。 今回のFirefoxの一件は、オープンソースの世界に御仕着せな仕様が入ってきたことに違和感を感じました。 オープンソースとフリーなソフトウェアとは違うことは理解しているつもりですが、こういうことを感じるのは年寄りだけなのかも知れません。

自分の好きなものを使う自由が尊重されるのがGNU/Linuxだと思っていましたが、どうも今どきは違うようですね。 initもそうですが(今どきは大抵systemdがデフォルトだし)、サウンドサーバーもALSAを使う自由は残して欲しいものです。