Windows同士のRDP接続は、特に何もしなくても画面と音がリモートデスクトップ経由でローカルマシンに再生されますが、xrdp環境では標準ではないようです。
xrdp環境で音が出るようにやってみたのでご報告です。
音が出ないことに気づく
前回の「Debianのxrdp環境を整備してCinnamonとMATEを比べる - treedown’s Report」でセットアップしたRDP接続で利用するDebian環境、xrdp経由で接続していたのですが、リモートデスクトップ接続で音が出ないことに気づきました。
今回はこれに音が出るようにセットアップしていこうという狙いです。
参考にさせてもらったサイト
今回は下記のサイトを参考にさせてもらいました。
参考にさせて貰った記事ではDebian 10 Buster環境ですが、今回作業した環境は、「Debian GNU/Linux 11 (bullseye)」環境となります。
追記(23-05-23):
新しいバージョンのPulseAudio 15以降では、今回の./configureを使用したセットアップ方法は非推奨となっています。
./configureを使わないやり方でやってみた記録は以下のリンクの記事になります。
追記ここまで。
makeインストールの準備
xrdp経由でサウンドを再生するために必要なパッケージは「pulseaudio-module-xrdp」になります。
xrdp-build-pulse-modulesのパッケージ解説を読んでみました。
PulseAudio(network-capable sound server program)のモジュールにxrdp用のサウンドサーバがあって、それがxrdpでサウンドを再生させる機能を提供してくれるらしい。
まずは、make installのために必要になるパッケージをインストールします。
# apt install libpulse-dev dh-autoreconf git build-essential dpkg-dev
libpulse-devはPulseAudioクライアント開発ヘッダーとライブラリPulseAudioによってPOSIX および WIN32 システム用のサウンド サーバーがインストールされます。
dh-autoreconfは、autoreconfを呼び出して、ビルド後に後始末するdh_autoreconf_cleanを提供するアドオンです。
gitは、gitのリソースを使うために必要になるインストール。
build-essentialは、開発パッケージの一式がインストールされます。
dpkg-devは、build-essentialとやや被りですが、インストールを実行しておきます。
次のコマンドは実際にPulseAudioの導入をする手順です。
# cd /opt/
# apt install pulseaudio pavucontrol
# apt build-dep pulseaudio
# apt source pulseaudio
実施前にカレントディレクトリを「/opt」にしておきました。コマンドの実行終了後にはPulseAudioパッケージがカレントディレクトリに展開されています。
「apt build-dep」では、ソースパッケージの依存関係を満たすようにインストールと削除を実行してくれます。
「apt source」では、pulseaudioのソースコードをダウンロードしています。
ここまで実行が完了すると、カレントディレクトリには以下のようにパッケージが展開されています。
--------------------------------------------------------------
# ls -la
合計 1964
drwxr-xr-x 4 root root 4096 5月 11 19:53 .
drwxr-xr-x 19 root root 4096 5月 11 16:38 ..
drwxr-xr-x 15 root root 4096 5月 11 19:53 pulseaudio-14.2
-rw-r--r-- 1 root root 35532 2月 27 2021 pulseaudio_14.2-2.debian.tar.xz
-rw-r--r-- 1 root root 3699 2月 27 2021 pulseaudio_14.2-2.dsc
-rw-r--r-- 1 root root 1951300 1月 20 2021 pulseaudio_14.2.orig.tar.xz
--------------------------------------------------------------
makeインストールの実行
ここからmakeインストールの実行に入ります。
カレントディレクトリを「pulseaudio-14.2」に移動します。
# cd pulseaudio-14.2/
ここでのフルパスだと「/opt/pulseaudio-14.2/」にディレクトリ移動しています。
# ./configure
makeインストールの実行時の定番「./configure」です。
# cd ..
# git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
いったん上の階層にディレクトリ移動して、gitコマンドでダウンロードを実行。
--------------------------------------------------------------
# ls -la /opt/
合計 1968
drwxr-xr-x 5 root root 4096 5月 11 19:57 .
drwxr-xr-x 19 root root 4096 5月 11 16:38 ..
drwxr-xr-x 15 root root 4096 5月 11 19:55 pulseaudio-14.2
drwxr-xr-x 10 root root 4096 5月 11 20:00 pulseaudio-module-xrdp
-rw-r--r-- 1 root root 35532 2月 27 2021 pulseaudio_14.2-2.debian.tar.xz
-rw-r--r-- 1 root root 3699 2月 27 2021 pulseaudio_14.2-2.dsc
-rw-r--r-- 1 root root 1951300 1月 20 2021 pulseaudio_14.2.orig.tar.xz
--------------------------------------------------------------
これで「pulseaudio-module-xrdp」が増えています。
# cd pulseaudio-module-xrdp/
# ./bootstrap && ./configure PULSE_DIR=/opt/pulseaudio-14.2
カレントディレクトリを「pulseaudio-module-xrdp」に移動して、コンパイルを実行、「PULSE_DIR=」に続けて、一つ前の作業で「./configure」を実行したディレクトリをフルパスで(ここでは</opt/pulseaudio-14.2>の指定)記述します。
これでようやくmakeコマンドとmake installを実行。
# make
# make install
これで必要なpulseaudio-module-xrdpがインストールされました。
インストール確認
以下のコマンドでインストール確認ができます。
# ls $(pkg-config --variable=modlibexecdir libpulse)
実際に実行してみた出力。
----------------------------------------------------------------------------------------------------------------------------
root@hostname:/opt/pulseaudio-module-xrdp# ls $(pkg-config --variable=modlibexecdir libpulse)
libalsa-util.so module-bluetooth-discover.so module-filter-heuristics.so module-remap-sink.so module-tunnel-sink-new.so
libbluez5-util.so module-bluetooth-policy.so module-http-protocol-tcp.so module-remap-source.so module-tunnel-sink.so
libcli.so module-bluez5-device.so module-http-protocol-unix.so module-rescue-streams.so module-tunnel-source-new.so
liboss-util.so module-bluez5-discover.so module-intended-roles.so module-role-cork.so module-tunnel-source.so
libprotocol-cli.so module-card-restore.so module-ladspa-sink.so module-role-ducking.so module-udev-detect.so
libprotocol-http.so module-cli-protocol-tcp.so module-loopback.so module-rtp-recv.so module-virtual-sink.so
libprotocol-native.so module-cli-protocol-unix.so module-match.so module-rtp-send.so module-virtual-source.so
libprotocol-simple.so module-cli.so module-mmkbd-evdev.so module-rygel-media-server.so module-virtual-surround-sink.so
librtp.so module-combine-sink.so module-native-protocol-fd.so module-simple-protocol-tcp.so module-volume-restore.so
libwebrtc-util.so module-combine.so module-native-protocol-tcp.so module-simple-protocol-unix.so module-x11-bell.so
module-allow-passthrough.so module-dbus-protocol.so module-native-protocol-unix.so module-sine-source.so module-x11-cork-request.so
module-alsa-card.so module-default-device-restore.so module-null-sink.so module-sine.so module-x11-publish.so
module-alsa-sink.so module-detect.so module-null-source.so module-stream-restore.so module-x11-xsmp.so
module-alsa-source.so module-device-manager.so module-oss.so module-suspend-on-idle.so module-xrdp-sink.la
module-always-sink.so module-device-restore.so module-pipe-sink.so module-switch-on-connect.so module-xrdp-sink.so
module-always-source.so module-echo-cancel.so module-pipe-source.so module-switch-on-port-available.so module-xrdp-source.la
module-augment-properties.so module-filter-apply.so module-position-event-sounds.so module-systemd-login.so module-xrdp-source.so
----------------------------------------------------------------------------------------------------------------------------
OSを再起動して、有効になります。
# systemctl reboot
再起動後、改めて、RDP接続でDebian環境に接続してみましょう。
接続して、音が出ることを確認
リモートデスクトップで接続したのち、ブラウザなどでyoutubeの動画を確認してみると、音が出ることが確認できました。リモートデスクトップ接続で音が出るというのは当たり前じゃなかったんだなぁと実感。
ただ、やや品質に問題があるときも…、と確認してみたら、弱点のCeleron847が原因のようです。システムモニターを確認してみたら、
CPU使用率100%のまま、ブラウザ起動だけでもCPU使用率がかなり上昇するのですが、それで動画再生などしてしまうとこうなってしまうのはしょうがないか。
ちなみに、Intel Core i7 4770のゲストOSで動作しているDebianでは、
やはり歴然とした差、このためCeleron847というCPUがネックになって品質に影響していると判断しました。