DockerもいいけどLXDもね 5 〜コンテナからも音を鳴らしたい〜
ここまでの記事で簡単にLXDデスクトップ環境を作れるようにはなったと思います。
ただこれ実際に作って使ってみた人か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等で確認してみましょう
スピーカーテスト
で検索すると確認用の動画が出てくるのでおすすめです。
ちなみに最初の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