Raspberry Pi docker PulseAudio

前回作成したraspbian-MATEのコンテナからPulse Audioを利用できるか試してみました。

当サイトの環境はmoode audioにpulse serverを設定、clientのpi3はmoode audioでpulse audioがスタートしてあればmoode audio側で再生、ストップ時は内臓のalsaで再生します。

raspbian-MATE

作成したraspbian-MATEのコンテナにはpulse clientのライブラリはインストールされています。

/root/.config/pulse/client.confを作成します。
内容はhostのpi3(~/.config/pulse/client.conf)と同様です。

# mkdir ~/.config/pulse

/root/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true
default-server = 192.168.xxx.xxx

音楽プレーヤーにはaudaciousをインストールしてみました。必要なライブラリを含めて240MB位インストールされます。

# apt install audacious

インストールが終わっtら一旦コンテナをリスタートさせます。


audaciousを起動してオーディオ設定から出力プラグインをAlsa出力からPulseAudio出力に変更します。
pulse serverがスタートしていないとAlsa出力に戻るので要チェック


音楽ファイルを適当に用意します。
dockerで設定した共有ディレクトリ以外にもMATEのファイルマネージャーにはhostの物理デバイス(osパーテーションを覗く)が見えてきます。
コンテナはrootで実行しているので扱いは慎重に!

pulse serverのpulse audioをstartしてhost(pi3)はpavucontrolを起動します。

コンテナからもhostから利用する場合と全く同様に実行が可能ですね。
firefoxもpulse serverが先にスタートしてあれば自動でPulseAudioに出力します。

raspbian RPDはpulse clientだけインストールすれば同様に動きます。

# apt install libpulse0

起動メニューを作成する
これまで作成したコンテナはいろいろ使い倒せるので簡単に起動できるようメニューを作成してみました。

Container Stopは起動中のコンテナ全てを停止します。
RPDとMATEはXの起動を待つため5秒のsleepを入れています。(時間は要調整)
状況に応じてhostのdockerデーモンを再起動。
必要に応じてmenuを書き換え。~/bin/docker.sh

Main Menu Editorで登録しておけば使いやすくなると思います。
#実行権限が必要でした。
$ chmod 755 ~/bin/docker.sh

#!/bin/bash
ACTION=$(zenity --list --radiolist \
  --width=300 --height=230 \
  --hide-header \
  --title="Docker Session" \
  --text="What would you like to do? by Docker" \
  --column "Select" --column="Action" \
  TRUE  "Docker Container Stop" \
  FALSE "Stretch RPD" \
  FALSE "Stretch MATE" \
  FALSE "Stretch Lite" \
  FALSE "Systemctl Restart Docker" \
  FALSE "This Menu Edit")
RET=$?

if [ "$ACTION" = "Docker Container Stop" ]; then
  docker container stop $(docker ps -q)
elif [ "$ACTION" = "Stretch RPD" ]; then
  docker container start stretch_rpd
  sleep 5
  vncviewer localhost:1
elif [ "$ACTION" = "Stretch MATE" ]; then
  docker container start stretch_mate
  sleep 5
  vncviewer localhost:1
elif [ "$ACTION" = "Stretch Lite" ]; then
  docker container start stretch_lite
  sleep 2
  gnome-terminal -e 'docker container exec -it stretch_lite /bin/bash'
elif [ "$ACTION" = "Systemctl Restart Docker" ]; then
  sudo systemctl restart docker
elif [ "$ACTION" = "This Menu Edit" ]; then
  leafpad ~/bin/docker.sh
else
   echo "cancel"
fi