🎶

DockerもいいけどLXDもね 5 〜コンテナからも音を鳴らしたい〜

2021/04/05に公開

ここまでの記事で簡単にLXDデスクトップ環境を作れるようにはなったと思います。

https://zenn.dev/tantan_tanuki/articles/72ac0f92588222

ただこれ実際に作って使ってみた人かVNC使ったことある人なら気づくと思うのですが

音が出ません

個人的には開発環境に音が必要になったことがないのとVNCの仕様なので別にいいかなと思ってこの機能は使ってませんがメモが残ってたので必要になったときのための備忘録として残します。

仕組み

ホストOS側に音鳴らす環境はあるはずなのでそれを共用するだけです。

やってみる

まずサウンドサーバの設定を変更します。

lxc exec steam -- sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf

これでソケットファイルを介したオーディオ再生をする設定になります。
この状態でホストOSのソケットファイルをコンテナ側から触れるようにマウントします。

lxc config device add gui PASocket disk source=/run/user/1000/pulse/native path=/tmp/.pulse-native

これでホストOSにある/run/user/1000/pulse/nativeという音を鳴らすためのソケットファイルをコンテナ内の/tmp/.pulse-nativeにアクセスすることで使えるようになりました。

ちなみに1000というマジックナンバーがありますがこれはユーザIDです

id -u

上記コマンドをホストOSで打ってみて1000であることを確認して違ってたら変更して下さい
確かRedHat系は1000始まりじゃなかったはずなので違う人もいると思います。

さてこれでコンテナ側から音鳴らす準備は出来ました。
後はこのソケットファイルを音を鳴らしたいユーザに認識させましょう。

lxc exec gui -- sed -i -e 's|\(/etc/X11/Xsession\)|export PULSE_SERVER=unix:/tmp/.pulse-native\n\1|g' /home/ubuntu/.vnc/xstartup

これで次回VNC起動時に
PULSE_SERVER=unix:/tmp/.pulse-native
の環境変数が設定されて音声データがこのソケットに流されるようになるので
とりあえず再起動しましょう。

lxc restart gui

ここでVNC接続してYoutube等で確認してみましょう
スピーカーテスト
で検索すると確認用の動画が出てくるのでおすすめです。

https://youtu.be/-EMdC9ifNgA

ちなみに最初の2コマンドは
前回の記事のプロファイルに以下を追記すれば最初から定義しておけます。
デフォルトで有効にしときたい人はこっちのほうが楽ですね。

      - sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf
devices:
  PASocket:
    path: /tmp/.pulse-native
    source: /run/user/1000/pulse/native
    type: disk

それではよいLinuxライフを

しゃみしゃっきりー

Discussion