treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

別のやり方でDebianのxrdp環境で音が出るようにセットアップ

前回「Debianのxrdp環境で音が出るようにセットアップ」で実施したのとは別の方法(とはいえ似てはいるのですが)でセットアップをやってみましたのでご報告です。
次バージョンPulseAudio 15.0ではこちらのやり方になるよう。

発端

前回の「Debianのxrdp環境で音が出るようにセットアップ - treedown’s Report」でやってみた方法で現行バージョンでxrdp接続のサウンド再生に成功しました。
今回は前回と違ったやり方で、同じようにxrdp接続のサウンド再生ができるようにセットアップしてみようと思います。

2021年夏のリリースでPulseAudio 15が公開され、DebianベースのディストリビューションのいくつかはPulseAudio 15.0以降が使われるようになっています。
PulseAudio 15.0以降ではコンパイルプロセスが変更されていて、meson技術を使用しています。
(※meson…Pythonベースのビルド自動化のためのソフトウェア)

このバージョンアップで、./configureを使ったセットアップが非推奨になったようです。

前回のDebian 11 bullseyeではapt sourceから取得したPulseAudioは「pulseaudio-14.2」だったので./configureでセットアップできましたが、リポジトリがPulseAudio 15.0以降に更新されたら、前回のやり方ができなくなる可能性もありそうです。

試してみた環境

今回はPulseAudio 15.0以降の導入方法を確かめる目的で、前回動作確認したDebian 11 bullseyeの他にもDebian 12 bookworm(testing)をHyper-V環境のゲストとして導入して動作確認することにしました。

Debian 12 bookwormではpulseaudio (16.1+dfsg1-2)となるはず。

https://packages.debian.org/ja/bookworm/pulseaudio

前提として、どちらも

# apt install xrdp
# /usr/sbin/adduser xrdp ssl-cert

は実行済でxrdp導入状態であることとします。

まずは、前回と同じDebian 11 bullseyeから確認していきます。

Debian 11 bullseyeでの実施内容

まずは必要となるパッケージを導入しておきます。ちなみに今回はユーザ権限で作業しています。rootが必要なところはsudo利用。

$ sudo apt install build-essential dpkg-dev libpulse-dev git autoconf libtool

後述の作業「make」でエラーが発生するため、「libltdl-dev」もインストールする必要があります。

$ sudo apt install libltdl-dev

(上記のapt installで導入されるバージョンもありますが、追加パッケージで導入されないバージョンもあるようなので、一応手動で実行)

今回はホームディレクトリ「/home/%USERNAME%」を作業ディレクトリ・導入対象ディレクトリにします。

$ cd ~
$ git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git

ホームディレクトリにダウンロードしたファイルを確認「ls -la」するとpulseaudio-module-xrdpが確認できます。

そこでさっそく導入用スクリプトの実行をします。

$ cd ~/pulseaudio-module-xrdp
$ scripts/install_pulseaudio_sources_apt_wrapper.sh

ここではカレントディレクトリは「/home/%USERNAME%/pulseaudio-module-xrdp」になっています。スクリプトを実行すると

--------------------------------------------------------------
- Need to install packages : debootstrap schroot

  These can be removed when this script completes with:-
  sudo apt-get purge debootstrap schroot && apt-get autoremove
(以下略)
--------------------------------------------------------------

と表示され処理が進んでいきます。

最終的に、

--------------------------------------------------------------
- All done. Configure PA xrdp module with PULSE_DIR=/home/%USERNAME%/pulseaudio.src
--------------------------------------------------------------

「All done.」の行の表示をもって処理は成功しています。ここではホームディレクトリを指定しているため、PULSE_DIR=の表示もホームディレクトリになっています。

同じカレントディレクトリ内で処理を続けます。

$ ./bootstrap && ./configure PULSE_DIR=~/pulseaudio.src

前回もやっていた「./bootstrap」の実行です。
「PULSE_DIR=」の指定は今回の導入ではホームディレクトリです。

ここの処理もまずまず掛かります。
パスの指定を間違っていたら「configure: error: /bin/bash build-aux/config.sub /home/%USERNAME%/pulseaudio.src failed」という感じでエラーになります。「PULSE_DIR=」はここまでの作業で指定した導入ディレクトリの指定をします。

完了すると「config.status: executing libtool commands」でプロンプトが返ります。

続いて、make実行。

$ make

特にエラーもなく完了するので、これに続いて、

$ sudo make install

make installを実行します。 

これで作業は完了です。

動作確認

確認は、前回の導入方法と同じやり方です。

$ ls $(pkg-config --variable=modlibexecdir libpulse) | grep xrdp

これで出力結果にモジュール名が表示されれば導入成功です。実行すると、

--------------------------------------------------------------
$ ls $(pkg-config --variable=modlibexecdir libpulse) | grep xrdp
module-xrdp-sink.la
module-xrdp-sink.so
module-xrdp-source.la
module-xrdp-source.so
--------------------------------------------------------------

このような出力になります。末尾が.soの二つ(module-xrdp-sink.soとmodule-xrdp-source.so)が表示されているので、PulseAudioモジュールが構築されインストールされていると判断できるようです。

Debian 12 bookworm(testing)では失敗

Hyper-V環境のゲストで用意したDebian 12 bookworm(testing)環境でも同じようにやってみたのですが、スクリプト実行の段階でエラーが出てしまい、作業がbullseyeのように進みませんでした。

$ scripts/install_pulseaudio_sources_apt_wrapper.sh

実行時に

** schroot failed. Check log file /var/tmp/pa-build-%USERNAME%-schroot.log

と出力し、終了してしまいます。

ログファイル「/var/tmp/pa-build-%USERNAME%-schroot.log」を確認すると、

--------------------------------------------------------------
Run-time dependency check found: YES 0.15.2
Configuring doxygen.conf using configuration

doxygen/meson.build:9:0: ERROR: Program 'doxygen' not found or not executable

A full log can be found at /build/pulseaudio-16.1+dfsg1/build/meson-logs/meson-log.txt
WARNING: Running the setup command as `meson [options]` instead of `meson setup [options]` is ambiguous and deprecated.
(END)
--------------------------------------------------------------

想定のpulseaudio-16.1+dfsg1が導入されている様子は確認できたのですが、最後に「WARNING: Running the setup command as `meson [options]` instead of `meson setup [options]` is ambiguous and deprecated.」で処理が停止しています。

来月6月にstableでリリースするから、stableのbookwormがリリースされたらもう一回やってみようかなと思いました。(時間があれば)

サウンドの導入後

導入が成功したDebian 11 bullseye環境で動作確認。Windowsからリモートデスクトップ接続で接続し、ブラウザから適当な動画再生で作業実施前には音が出なかった環境だった状況からサウンド再生がされるようになったことを確認できました。

初期にはダミー出力だったサウンドの設定画面でも、

このようにxrdpのサウンドモジュールが読み込まれていることが確認できました。

入力タブでも

xrdp関連のモジュールがロードされています。

出力タブでも

ダミー出力から「remote audio output」に替わっています。

失敗もあったけど何とか作業完了

こうしてbullseyeだけでしたが、"./configure"非推奨となった後のバージョンの手順であるスクリプトを利用したxrdp向けサウンド機能の導入方法をやってみました。

前回と違うのは./configureの手順がscripts/installに置き換わった感じです。今後のやり方はこちらの手順になっていくようなので覚えておこうと思います。