[メモ] ラズパイ/TinkerBoard: xrdp(リモートデスクトップ)を使う。音も鳴らそう!

## 概要
Raspbianが、Stretch(Debian 9)ベースになり、パッケージレポジトリのxrdpは 0.9.1ベースになりました。
それによって、テキストのコピペなど簡単にできるようになりましたね。しかも、`apt install xrdp`するだけ。

それだけの説明だと、つまらないので、`pulseaudio`(デフォルトパッケージから外されましたが..)を使った、リモート経由で音も聞けるようにビルドしたファイルを用意したので、それの使い方も書きます。

\#(追記:2017-8-25) TinkerBoardでも同じファイルを使って、できました。手順の2.と3.を参考に。

- => ラズパイのYoutube再生で、Windowsから音が出るよ<br>♪♪～けものはいても、のけものはいない～♪♪<br>https://www.youtube.com/watch?v=xkMdLcB_vNU<br>![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/da8c95aa-8ab5-2d42-d295-8e7039892c37.png)


## 環境
- Raspberry Pi: 2 model B
- Raspbian: `2017-08-16-raspbian-stretch`
- Windows 7 (64bit)の Remote Desktop Connection/リモートデスクトップ接続を使用。


## 手順

1. 初期設定
	- RaspbianイメージをmicroSDに焼く。(おすすめツール [Etcher](https://etcher.io/))
	- sshを使う場合、bootパーティションに、`ssh`というファイル名で空ファイル作成。
	- 起動。
	- ターミナル起動
	- パッケージ更新・再起動: <br>`sudo apt update && sudo apt upgrade -y && sudo reboot`
	- その他設定(お好みで。または設定終了後、リモートデスクトップ上から)
		- キーボードの設定<br>メニュー > 設定 > キーボードとマウス
		- タイムゾーン<br>sudo dpkg-reconfigure tzdata
		- 日本語関係(フォント,入力)<br>`sudo apt install -y fonts-ipafont fonts-ipaexfont fonts-takao ibus-mozc`
		- ロケール<br>`sudo dpkg-reconfigure locales` # ja_JP.UTF-8にする
		- ユーザパスワード変更: `passwd`
		- 再起動
		- Mozc入力設定(101キーボードなど)<br>メニュー>設定 > Mozcの設定<br>キー設定の選択 > \[編集\] を押したら、入力キーをクリックして、ソート。<br>`Hankaku/Zenkaku`を `Ctrl+Space`とかに変更する
           
2. xrdp関連のパッケージインストール 

	```bash
	sudo apt install -y xorgxrdp xrdp 
	```
	<!-- ... こんだけ... -->

3. (お好みで)pulseaudio経由で、リモートで音も鳴らす場合は、コレもする。
	- xrdpを終了させるので、<font color='red'>リモートデスクトップ上で実行しない</font>こと。 (sshなどでログインして行おう)

	```bash
	## Pulseaudioをインストール
	sudo apt install pulseaudio --install-suggests -y
	# 設定書き換え
	# /etc/pulse/default.pa の最後に２行追加 module-xrdp-sink.soとmodule-xrdp-source.so
	grep module-xrdp-sink.so /etc/pulse/default.pa || sudo sed -i -e '$amodule-xrdp-sink.so' /etc/pulse/default.pa
	grep module-xrdp-source.so /etc/pulse/default.pa ||sudo sed -i -e '$amodule-xrdp-source.so' /etc/pulse/default.pa
	# start-pulseaudio-x11 を自動起動させる
	## For RPi
	f=~/.config/lxsession/LXDE-pi/autostart ; if [ -e $f ]; then grep 'start-pulseaudio-x11' $f > /dev/null  || sed -i -e '$a@start-pulseaudio-x11' $f; fi
	## For Tinker Board
	f=~/.config/lxsession/LXDE/autostart ; if [ -e $f ]; then grep 'start-pulseaudio-x11' $f  > /dev/null || sed -i -e '$a@start-pulseaudio-x11' $f; fi



	## pulseaudioに対応したファイルをダウンロード
	wget https://github.com/mt08xx/files/raw/master/xrdp-audio_armhf-20170821-1.tbz
	tar xf xrdp-audio_armhf-20170821-1.tbz
	cd xrdp-audio_armhf/
	#ファイル確認
	ls -l
	# モジュールをコピー
	sudo cp -v *.so /usr/lib/pulse-10.0/modules/
	# ここのxrdpをインストール
	# sudo dpkg -i ./xrdp_0.9.1-9_armhf.deb

	# サービス・プロセス停止
	sudo systemctl stop xrdp xrdp-sesman
	sudo killall -9 xrdp-chansrv
	sudo killall -9 xrdp-sesman
	sudo killall -9 xrdp-sessvc

	# debからファイルを抽出して、上書きコピー
	dpkg -x xrdp_0.9.1-9_armhf.deb ./ext
	sudo cp -r ext/usr/{lib,bin,sbin} /usr
	rm -rfv ./ext

	# 再起動
	sync && sleep 5 && sudo reboot
	```

4. Windowsでリモートデスクトップ接続を起動
	- オプションを表示させると<br>
	![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/aa747b89-249a-709c-1906-f9f5882cb8e0.png)
	- いろいろ設定できる。Displayのとこで画面サイズとか指定できる。接続ボタンをおす<br>
	![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/4d8a2559-5e07-405e-16ec-2bff047d6608.png)
	- なんか聞かれたら、接続とか、OKとか押せばいいかと...(ぉぃ<br>
	![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/c3f17725-fc8f-e1a5-935c-601c74d8cee6.png)
	- こんなのがでてきたら、SessionでXorg、username、passwordを入れて、\[OK\]をおして、<br>
	![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/b41c8446-185d-464b-724f-a0f1d981a3a2.png)
	- ログイン<br>
	![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/102252bc-6da5-3a73-223f-589515aa6dbc.png)


## おまけ

- 再起動後、ターミナルを開いて、音を再生。<br>`aplay /usr/share/sounds/alsa/Front_Center.wav`<br>鳴ったかな？
- Chromium開いて、Youtubeとか、見てみよう。

- `xrdp-audio_armhf-20170821-1.tbz` の中身

	```shell-session:配布ファイル
	pi@raspberrypi:~/xrdp-audio_armhf $ ls -l
	total 432
	-rwxr-xr-x 1 pi pi  23952 Aug 21 20:03 module-xrdp-sink.so
	-rwxr-xr-x 1 pi pi  19496 Aug 21 20:03 module-xrdp-source.so
	-rw-r--r-- 1 pi pi 393574 Aug 21 20:04 xrdp_0.9.1-9_armhf.deb
	pi@raspberrypi:~/xrdp-audio_armhf $ 
	```

### ビルドメモ
- Debianのソースからビルドを使用
- xrdpのビルドのconfigureのオプションに`--enable-mp3lame`と`--enable-pixman`を追加。
- pulseaudioのconfigure間で実行させて、config.hを生成したら、CTRL-Cして、module-xrdp-{sink,source}.so をビルド。 
- 手順

	```bash
	# ソース取得できるように設定
	# /etc/apt/sources.list の #deb-src の#をはずして、apt update
	sudo bash -c "sed  -i -e 's/#deb-src/deb-src/' /etc/apt/sources.list && apt update"

	# ワークフォルダ
	mkdir ~/work && cd ~/work

	#xrdp のビルドに必要なパッケージ取得
	sudo apt-get build-dep -y xrdp  pulseaudio && sudo apt install -y libmp3lame-dev

	# ソース取得
	apt-get source xrdp pulseaudio

	#xrdp
	### xrdpのソースフォルダへ移動
	cd xrdp-0.9.1
	# debian/rules を編集 : --enable-mp3lame --enable-pixman を configureに追加
	sed -i -e 's@--enable-ipv6 \\@--enable-ipv6 --enable-mp3lame --enable-pixman \\@' debian/rules
	# xrdpビルド開始
	dpkg-buildpackage -us -uc
	# => workに xrdp_0.9.1-9_armhf.deb ができる

	#module-xrdp-sink.so とmodule-xrdp-source.soのビルド
	### pulseaudio の config.h
	cd ~/work/pulseaudio-10.0
	# ビルドを開始させる。。が、configureが終わった(config.hが生成された)くらいで、CTRL-Cを押す。
	dpkg-buildpackage -us -uc


	## モジュールのビルド
	cd ~/work/xrdp-0.9.1/sesman/chansrv/pulse/
	#変更前:PULSE_DIR = /home/lk/pulseaudio-1.1
	#変更後:PULSE_DIR = /home/pi/work/pulseaudio-10.0
	sed -i -e 's@/home/lk/pulseaudio-1.1@/home/pi/work/pulseaudio-10.0@g'  Makefile
	make
	# 生成物をworkにコピー
	cp -v *.so ~/work
	```


### xrdpインストールログ
- メモ

	```shell-session:インストールログ
	pi@raspberrypi:~ $ sudo apt install -y xrdp xorgxrdp
	Reading package lists... Done
	Building dependency tree       
	Reading state information... Done
	The following additional packages will be installed:
	  ssl-cert x11-apps x11-session-utils xbitmaps xfonts-75dpi xfonts-base xfonts-scalable xorg
	  xorg-docs-core
	Suggested packages:
	  openssl-blacklist xorg-docs x11-xfs-utils guacamole
	The following NEW packages will be installed:
	  ssl-cert x11-apps x11-session-utils xbitmaps xfonts-75dpi xfonts-base xfonts-scalable xorg
	  xorg-docs-core xorgxrdp xrdp
	0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
	Need to get 10.8 MB of archives.
	After this operation, 17.1 MB of additional disk space will be used.
	Get:1 http://mirrordirector.raspbian.org/raspbian stretch/main armhf ssl-cert all 1.0.39 [20.8 kB]
	Get:2 http://mirrordirector.raspbian.org/raspbian stretch/main armhf x11-apps armhf 7.7+6 [544 kB]
	Get:3 http://mirrordirector.raspbian.org/raspbian stretch/main armhf x11-session-utils armhf 7.7+2 [61.4 kB]
	Get:4 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xbitmaps all 1.1.1-2 [32.1 kB]
	Get:5 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xfonts-75dpi all 1:1.0.4+nmu1 [3,367 kB]
	Get:6 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xfonts-base all 1:1.0.4+nmu1 [5,911 kB]
	Get:7 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xfonts-scalable all 1:1.0.3-1.1 [304 kB]
	Get:8 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xorg-docs-core all 1:1.7.1-1 [83.8 kB]
	Get:9 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xorg armhf 1:7.7+19 [38.4 kB]         
	Get:10 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xorgxrdp armhf 0.9.1-9 [73.1 kB]     
	Get:11 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xrdp armhf 0.9.1-9 [402 kB]         
	Fetched 10.8 MB in 17s (606 kB/s)                                                                         
	Preconfiguring packages ...
	Selecting previously unselected package ssl-cert.
	(Reading database ... 122654 files and directories currently installed.)
	Preparing to unpack .../00-ssl-cert_1.0.39_all.deb ...
	Unpacking ssl-cert (1.0.39) ...
	Selecting previously unselected package x11-apps.
	Preparing to unpack .../01-x11-apps_7.7+6_armhf.deb ...
	Unpacking x11-apps (7.7+6) ...
	Selecting previously unselected package x11-session-utils.
	Preparing to unpack .../02-x11-session-utils_7.7+2_armhf.deb ...
	Unpacking x11-session-utils (7.7+2) ...
	Selecting previously unselected package xbitmaps.
	Preparing to unpack .../03-xbitmaps_1.1.1-2_all.deb ...
	Unpacking xbitmaps (1.1.1-2) ...
	Selecting previously unselected package xfonts-75dpi.
	Preparing to unpack .../04-xfonts-75dpi_1%3a1.0.4+nmu1_all.deb ...
	Unpacking xfonts-75dpi (1:1.0.4+nmu1) ...
	Selecting previously unselected package xfonts-base.
	Preparing to unpack .../05-xfonts-base_1%3a1.0.4+nmu1_all.deb ...
	Unpacking xfonts-base (1:1.0.4+nmu1) ...
	Selecting previously unselected package xfonts-scalable.
	Preparing to unpack .../06-xfonts-scalable_1%3a1.0.3-1.1_all.deb ...
	Unpacking xfonts-scalable (1:1.0.3-1.1) ...
	Selecting previously unselected package xorg-docs-core.
	Preparing to unpack .../07-xorg-docs-core_1%3a1.7.1-1_all.deb ...
	Unpacking xorg-docs-core (1:1.7.1-1) ...
	Selecting previously unselected package xorg.
	Preparing to unpack .../08-xorg_1%3a7.7+19_armhf.deb ...
	Unpacking xorg (1:7.7+19) ...
	Selecting previously unselected package xorgxrdp.
	Preparing to unpack .../09-xorgxrdp_0.9.1-9_armhf.deb ...
	Unpacking xorgxrdp (0.9.1-9) ...
	Selecting previously unselected package xrdp.
	Preparing to unpack .../10-xrdp_0.9.1-9_armhf.deb ...
	Unpacking xrdp (0.9.1-9) ...
	Setting up x11-session-utils (7.7+2) ...
	Setting up xbitmaps (1.1.1-2) ...
	Setting up ssl-cert (1.0.39) ...
	Setting up xfonts-75dpi (1:1.0.4+nmu1) ...
	Processing triggers for libc-bin (2.24-11+deb9u1) ...
	Setting up xrdp (0.9.1-9) ...

	Generating 2048 bit rsa key...

	ssl_gen_key_xrdp1 ok

	saving to /etc/xrdp/rsakeys.ini

	Created symlink /etc/systemd/system/multi-user.target.wants/xrdp-sesman.service → /lib/systemd/system/xrdp-sesman.service.
	Created symlink /etc/systemd/system/multi-user.target.wants/xrdp.service → /lib/systemd/system/xrdp.service.
	Processing triggers for systemd (232-25+deb9u1) ...
	Processing triggers for man-db (2.7.6.1-2) ...
	Setting up x11-apps (7.7+6) ...
	Setting up xfonts-scalable (1:1.0.3-1.1) ...
	Setting up xorgxrdp (0.9.1-9) ...
	Setting up xorg-docs-core (1:1.7.1-1) ...
	Setting up xfonts-base (1:1.0.4+nmu1) ...
	Processing triggers for fontconfig (2.11.0-6.7) ...
	Setting up xorg (1:7.7+19) ...
	Processing triggers for libc-bin (2.24-11+deb9u1) ...
	pi@raspberrypi:~ $
	```


...

- \# <font color='grey'>(追記)Youtubeを、しばらく見てると、音が止まってしまう模様... う～ん..</font><br>=><font color='blue'>(2017-8-23) ネットワークの品質の問題だった？　様子見</font>
- \# <font color='grey'>`sudo apt update` すると、公式の`xrdp`にアップグレードできる(=元に戻される)、、、とでてくる。うまい方法を考え<del>ます</del>て教えてください..</font><br>=><font color='blue'>(2017-8-23) しょうがないので、debからファイルを抽出し、上書きするように記事を変更</font>

    ```shell-session
pi@raspberrypi:~/xrdp-audio_armhf $ sudo apt update
ヒット:1 http://archive.raspbian.org/raspbian stretch InRelease
ヒット:2 http://mirrordirector.raspbian.org/raspbian stretch InRelease
ヒット:3 http://archive.raspberrypi.org/debian stretch InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 1 個あります。表示するには 'apt list --upgradable' を実行してください。
pi@raspberrypi:~/xrdp-audio_armhf $ apt list --upgradable -a
一覧表示... 完了
xrdp/stable 0.9.1-9 armhf [0.9.1-9 からアップグレード可]
xrdp/now 0.9.1-9 armhf [インストール済み、0.9.1-9 にアップグレード可]
pi@raspberrypi:~/xrdp-audio_armhf $
```
- (追記) Debianのソースからビルドする手順を書きました。やってることは、`debian/rules`を変更して、xrdpのビルドのconfigureのオプションに`--enable-mp3lame`と`--enable-pixman`を追加するだけです。

...





- [2017-8-22 8:34am(JST)頃] 1000 contribution 達成 :-) ![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/96579471-d01a-a053-e674-677e9e6a417b.png)