«前の日記(2016-09-14) 最新 次の日記(2016-10-26)» 編集

meta's blog - The Power To Serve

筆者について - No Unix, No Life

日本xrdpユーザ会発起人。

とある元大学院生の UNIX 系日記。FreeBSDを通じてOSSに囁かな貢献を。 FreeBSD ports contributor やってます。

For non Japanese native people:
If you are interested in my articles, please leave comments. I will do my best to give you articles in English.


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 になっていれば成功です。

QcvWxHjtultGZ1S3NMig13WrBsQZVd6mKj6qKHCyIZJom0DiRH5ZWo_YenPQYNC1CvXHtHLjtBu6b0NHzfAMnRiv_IKm2cLT_1xJpqDmxyUJCPlPWCZ7tveJpzgCGbprhAppFyS9j0f3XMufn6rVU__KcnjoYYAFlfgyEfebRiibZUz1wyT5dYMKi0MbeedQ0P_biVXpiPR1QrMAg6V6dNbWSDpD-mCPMpZWWJ2-7LnIrsU4KSnrbwa1oi_Njvdv78rdqeKXou7a88HTLi5LNH-9ccY6RpABfdCabuFJmIPKOU5F0_Hc30R1MWr4G5O1qM-qbP1Bx8AOojqaJvXsVT-V4ZoYq-L8h8UrYtB5ixStUpL1Ed9DGVDa75VmhP2ZkJ2J165NE6wwQQXttL6uNg0arKxP4GDL9ZruryFTYq-hP9XUFZ3j41pAJNdxfdbN5Hvn_wBCg4u3P0w7xXatGC0dg2AM4GkHacaGenrDyNRoDKwIYWU7SNTn9pS8ej7xj5lPfIHS0mzWi45CAwOsOD7zpVGnOZfJd6V55hHnQwoRBpuV3MHlwQa6Bb2MvyZH7_U8TZM2DrvPEI_Y4AZjVGsqDmzYG6Aw890iTJvZ_t7yWRCSgQ=w654-h456-no?.png

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