最新

meta‘s blog

2016-10-19 xrdp でオーディオリダイレクト可能なデスクトップ環境を構築する (Ubuntu 16.10)

xrdp でオーディオリダイレクト可能なデスクトップ環境を構築する (Ubuntu 16.10)

この記事は2014年9月18日に書いた xrdp でオーディオリダイレクト可能なデスクトップ環境を構築する (Xbuntu 14.04.1) の改訂版です。

環境

Linux ディストリビューション
Ubunut 16.10
xrdp
0.9.0~20160601+git703fedd-3

Ubuntu では 16.10 以降、開発版の xrdp がリポジトリに含まれているので、それを使います。

この記事を書いた時点でのバージョンは 20160601 時点のバージョンです。

xrdp のインストール

Ubuntu では 16.10 以降、開発版の xrdp がリポジトリに含まれているので、それを使います。0.9.0~20160601+git703fedd-3 以降のバージョンであれば OK です。

$ sudo apt install xrdp

source.list の編集

"# deb-src " で始まる行のコメントアウトを解除します。

$ sudoedit /etc/apt/sources.list

sed を使うならこうです。

$ sudo sed -i.bak -e "s/^# deb-src \(.*\)/deb-src \1/" /etc/apt/sources.list

編集が終わったら、apt update を実行しておきます。

PulseAudio モジュールのビルド&インストール

xrdp のソースの中に含まれる pulse-notes.ubuntu.txt をベースにモジュールをインストールします。

dpkg-dev パッケージがインストールされていない場合は、あらかじめインストールしておきます。

$ sudo apt install dpkg-dev

PulseAudio のソースをダウンロードします。

$ cd /tmp
$ apt source pulseaudio

PulseAudio に依存するパッケージをインストールします。

$ sudo apt build-dep pulseaudio

PulseAudio をビルドします。

$ cd pulseaudio-8.0
$ dpkg-buildpackage -rfakeroot -uc -b

xrdp の PulseAudio モジュールをビルドします。これには xrdp のソースコードが必要なので、予め clone しておきます。clone 先はどこでもいいですが、今回は $HOME 以下にします。Ubuntu リポジトリにある xrdp のバージョンに合わせるため、devel ブランチを使います。

$ git clone --branch devel --recursive https://github.com/neutrinolabs/xrdp.git

pulse モジュールのディレクトリに入ります。

$ cd ~/xrdp/sesman/chansrv/pulse

Makefile の PULSE_DIR の部分を、先ほどの pulseaudio-8.0 の場所を指すように書き換えます。差分はこのようになります。合わせて、CFLAGS も以下のように書き換えます。

diff --git a/sesman/chansrv/pulse/Makefile b/sesman/chansrv/pulse/Makefile
index da1a89a..2471e5d 100644
--- a/sesman/chansrv/pulse/Makefile
+++ b/sesman/chansrv/pulse/Makefile
@@ -2,8 +2,8 @@
 # build xrdp pulseaudio modules
 #

-PULSE_DIR = /home/lk/pulseaudio-1.1
-CFLAGS    = -Wall -O2 -I$(PULSE_DIR) -I$(PULSE_DIR)/src -DHAVE_CONFIG_H -fPIC
+PULSE_DIR = /tmp/pulseaudio-8.0
+CFLAGS    = -Wall -O2 -I$(PULSE_DIR) -I$(PULSE_DIR)/src -I../../../ -I../../../common -I../../ -DHAVE_CONFIG_H -fPIC

 all: module-xrdp-sink.so module-xrdp-source.so

Makefile を書き換えたら make します。

$ make

make が終わると module-xrdp-sink.so, module-xrdp-source.so という2つのファイルができているので、これを /usr/lib/pulse-8.0/modules 以下にコピーします。

$ sudo cp module-xrdp-sink.so module-xrdp-source.so /usr/lib/pulse-8.0/modules/

これで終わりです。

リモートデスクトップ接続して音を出してみる

ここまで来たら、あとは xrdp にリモートデスクトップで接続するだけです。

xrdp のデーモンを立ち上げておきます。

$ sudo systemctl start xrdp

Windows のリモートデスクトップクライアントで接続し radiko などにアクセスして音を出してみると、リモートデスクトップ経由で音声が転送されて、クライアント側で音声が鳴っているのを確認できると思います。

pavucontrol などで、オーディオの出力先デバイスが xrdp sink になっていれば成功です。

2016年10月1日現在、xrdp はオーディオ転送の MP3 圧縮に対応しています。Ubuntu のリポジトリにあるものは MP3 圧縮が有効になっていないようですが、クライアント・サーバ双方が対応していれば、オーディオが MP3 でエンコードされて転送されます。