Raspberry Pi 3へのリモートデスクトップ接続でサウンド、クリップボードとドライブリダイレクトを使えるようにする

Raspberry Pi 3をWindowsマシンからいじりたいときリモートデスクトップで接続できると便利ですね。
そんな時はxrdpを使います。ですがリポジトリからxrdpをインストールするとクリップボードが機能せず、コピペができません。これではリモートデスクトップを使う意味が無くなってしまいます。

いろいろ試して何とか音が出てコピー&ペーストとドライブのリダイレクトが使えるようになりました。
xrdpはv0.8を使います。



【2017/4/3 追記
より新しい方法は
xrdp v0.9.1をRaspberry Pi 3にインストールする
をご覧ください。】

Raspbian Pi 3をWindowsマシンとリモートデスクトップ接続するにはxrdpを好んで使ってます。でもクリップボードが使えないんですよね。vncとか試してませんが、リモートデスクトッププロトコル(RDP)以外を使う気になりません。

ちょちょいと何か設定すればクリップボードを使えるようになるんだろうなぁ・・・とググりますが、まったく解決方法にたどり着きません。
結局、お手軽な解決方法はないようです。どうやらRaspberry Piのレポジトリにあるxrdpはクリップボードの機能が有効化されていないようです。バージョン古いようですし。
それなら自分でビルドすればいいんだ!
・・・
いや、Linux知らないし。特にいろいろなサービスを動かしまくるWindow周りはどこの設定が読まれるのか、どこに書いておけばサービスが動くのか全く分かりません。

ここは何か自動スクリプトで・・・とググります。
普通に考えるとx11rdp-o-maticを試すところなのですが、Raspberry Piでは問題があるそうです。試しましたがコンパイルエラーで動きません。

他にないかと探すとdebianで動かせそうなのがありました。クリップボードが使え、ドライブのリダイレクトまでできるというのです。
XRDP – Enabling Drives Redirection Feature & Clipboard / Griggon's IT Library
"To have drives redirection and clipboard support available within the xrdp session, there is a need to perform a custom installation of xRDP.  For some time now, we have provided a scripted solution that really simplifies the custom installation of the xRDP software solution"
クリップボードとドライブリダイレクトを組み込んだxrdpをビルドするスクリプトのようです。
ページの最後の方にスクリプトのリンクがあります。Ubuntuで動かしたようですがRPi3でうまくいくのかな?やってみましょう。

準備

【2016/12/14 追記
RASPBIAN JESSIE WITH PIXEL Version:November 2016 では動かせませんでした。"Closed packet"ってなんだろう・・・
以前のバージョンからアップグレードした場合は"sesman-Xvnc"でデスクトップの表示はできます。クリップボードのリダイレクトができません。ドライブとサウンドのリダイレクトはできています。

OSのバージョンは次のもので試しました。
pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie

RASPBIANのアップデートと時期が被ってしまいました。
2016-05-27-raspbian-jessie.imgで最初はやっていましたが、その後、2016-09-23-raspbian-jessie.img with PIXELでも試しました。両方同じ結果になるようです。

SDカードにイメージを焼いて日本語環境を整え、apt-get update, apt-get upgrade を行った状態で始めました。

with PIXELではRealVNCサーバが最初から入っています。xrdpと共存できないそうです。

INTRODUCING PIXEL
" If you want to use xrdp on a clean image, first uninstall the RealVNC server with sudo apt-get purge realvnc-vnc-server before installing xrdp. "
RealVNCサーバは削除します。
sudo apt-get purge -y realvnc-vnc-server

リポジトリからxrdpをインストール

リポジトリのxrdpが使えないからGriggon氏のスクリプトでビルドするのですがubuntuと環境が異なるせいか、スクリプトだけでビルドするとうまくいきません。回避策としてxrdpを一度インストールして動かすと、なんとかなる事が判りました。

スクリプトを実行する前に一度xrdpをリポジトリからインストールします。
sudo apt-get install xrdp
ここでRPi3を再起動して、パソコンからリモートデスクトップで一度接続しつながる事を確認してください。

もしかしたらエラーで接続できずに終わるかもしれません。with PIXELで何度もこの手順をやっていたのですが、ここで時々コネクションが成立しません。何かしらSDカードへのアクセスが不安定なのかもしれません。SDカードの抜き差し、USB電源ケーブルの確認などをした方が良いかもしれません。どうも再現性のない挙動が見られました。

ところで、Griggon氏のスクリプトの中でもリポジトリからxrdpをインストールしてすぐにremoveしています。しかし、これだけではうまく動かないようでした。

xrdpのビルド

先ほどのホームページからGriggon氏のスクリプトをダウンロードしてください。スクリプトはホームディレクトリに置いておけば良いでしょう。実行権限がある事を確認してください。

librfxcodecを追加する

これはやらなくて良いです。個人的なメモとして書いておきます。
追加モジュールのlibrfxcodecなるものを入れようとしました。ちゃんと動いているのか、役に立っているのかはわかりません。
Griggon氏のスクリプトを編集します。
step3の終わり、step4の前に次のコードを追加します。
【16/10/17修正 コンパイルできなくなったのでbootstrapとconfigure追加】
git submodule init
git submodule update
cd librfxcodec
sudo ./bootstrap
sudo ./configure
sudo make -j3
cd ..
そして、ステップ6のsudo ./configureとある行に次のオプションを追加します。
--enable-rfxcodec
保存します。

xrdpのバージョンを0.8にする

【16/10/15追記 この節の修正は必要なくなりました。
記事公開日の夜に試したらv0.8でもxrdpが動きませんでした。また、v0.8では日本語ファイルが表示されないかもしれません。
上のlibrfxcodecの操作をしなければv0.8にする必要はないようです。この節の変更は必要ありません。読み飛ばしてください。
スクリプトのままgit cloneしてください。下で説明するpulseaudioのsinkを作ると音も出ました。

【16/10/17追記
librfxcodecのコンパイルできました。機能してるかはわかりません。

この記事を書き始めて半月以上経ってしまいました。手順が安定せず何度もSDイメージの書き込みからやっていました。
そんな事をしていたら、あれ?with PIXEL? 手順をすべてやり直して動作するか確認しました。もう大丈夫かな?よし明日公開するぞ!

その前にもう一度確認しようかな。
ん?リモートデスクトップの反応が全くない!どして?スクリプトを順番に手打ちすると・・・xrdpのコンパイルできません。configureで失敗してます。configureのヘルプを見ると・・・なんか新しくなってる? configureオプションが一新されてました。昨日まで動いていたオプションがエラーで使えません。バージョンが変わったのでしょうか?v0.9.0とかいてあります。何とか動かそうとするもpulseaudioの扱い方がわかりません。コンパイルもできません。
紹介したスクリプトの意味が無くなる変更になりそうなのでv0.8を使います。

xrdpのバージョンは0.8を使います。
Configureオプションが大きく変わったようです。スクリプトを変更しないと動かなくなりました。
スクリプトのxrdpのクローンを取得する行を変更してv0.8ブランチを取得するようにします。step3の"git clone https://github.com/neutrinolabs/xrdp.git"の行を次のように変更してください。
git clone -b v0.8 https://github.com/neutrinolabs/xrdp.git

スクリプトの実行

これでやっとスクリプトを実行する準備ができました。スクリプトを実行しましょう。
スクリプトを実行すると必要なファイルを取ってきてビルドしてくれます。
1時間弱かかります。

スクリプトの最後はリブートになっているので実行結果を確認したい場合はその行をコメントアウトしておいた方が良いですね。
スクリプトの最後の方はエラーが出てるかもしれません。存在しないファイルをいじろうとしてるようですが動作に問題はないようなので放っておきます。

リモートデスクトップで接続する

リモートデスクトップで接続してみます。
おっ、なにやら無事に動きそうです。
"In the drop down box, the option SessionManager-Griffon should be selected.  Do not change this option."
ということなので、SessionManager-Griffon のまま進めます。
無事にリモートデスクトップは表示できました。

さて、肝心のクリップボードは使えるでしょうか? Windowsマシンでブラウザの適当なURLをコピーします。RPi3でブラウザを開きURLをペーストしてみると・・・
無事にペーストできました。 これでまともにリモートデスクトップが使えそうです。
with PIXELならChromiumも動きます。

さらにWindowsドライブのリダイレクトが機能するかもしれません。パソコンのドライブの中身がRPi3から簡単に見れるようになるなら素晴らしいです。
できるのかな? thinclient_drivesアイコンをダブルクリックします。 
おお! できました。ファイルのやり取りが簡単になります。

何も表示されない時はパソコン側のリモートデスクトップのローカルリソースを確認します。ドライブを選択していなければ表示はされません。
リソースにプリンタを選択しているとドライブのリダイレクトができないようです。プリンタのチェックは外しておきましょう。

ホームディレクトリの下にthinclient_drivesというフォルダができていて、ドライブのリダイレクトが機能するとここに表示されるようです。リモートデスクトップで接続していればSSHターミナルでもパソコンのドライブへアクセスできるようです。

気になる点はデスクトップがMATE Desktopになっている事ですね。with PIXELでも軽量なデスクトップ環境を提供してくれているのに申し訳ない気分になります。
MATEをログアウトするとLXDEの画面が表示されます。なんで?Linuxはほとんど知らないので仕組みがわかりません。MATEをログアウト後にリモートデスクトップを再接続するともうMATEは動きません。LXDEが見えます。
そして、thinclient_drivesは空になりドライブのリダイレクトは動かなくなってしまいます。
ユーザーとしてmate-sessionが動いてるとか?良くわからないのでMATEのまま使います。

ちなみに、Griggon氏のスクリプトでMATEのインストールをコメントアウトするとmate-sessionは動かなくなりデスクトップはLXDEになります。ですが、ドライブのリダイレクトは最初の1回目の接続でしか機能しませんでした。MATEをログアウトしたのと同じ感じです。どこでmate-sessionを動かせばいいのかわかりませんでした。

他に、リポジトリのxrdpではRPi3にUSBキーボードをつないでいないとキーボードレイアウトが英国に戻ってしまうようでしたが、Griggon氏のスクリプで作ったxrdpだと日本語レイアウトを維持しています。スクリプトを見ても理由を理解できていません。

サウンドのリダイレクトを使えるようにする

--enable-simplesoundを指定しましたが音は出ません。pulseaudioのsinkモジュールをビルドしないといけないようです。

こちらの情報を参考にやってみました。

Getting x11rdp working on Debian 8, Jessie, with the help of X11RDP-o-Matic
"Build Debian 8 pulseaudio xrdp sink modules"

ページの後半にpulseaudioのsinkモジュールの作り方が書いてあります。
この手順のまま実行するとエラーが出てしまいコンパイルできませんでした。
configure: error: Your intltool is too old.  You need intltool 0.35.0 or later. 
どうやらintltoolをインストールすれば良いようです。
sudo apt-get install intltool
これでコンパイルできるようになりました。
手順に従いコンパイルします。
pulseaudioのバージョンは5.0のようです。xrdpのソースは上の手順ですでにあるのでそれを使います。ユーザーはデフォルトのpiのままとしてます。
sudo apt-get install -y libjson0-dev libsndfile1-dev libspeex-dev libspeexdsp-dev libcap-dev
cd ~/Downloads
wget https://freedesktop.org/software/pulseaudio/releases/pulseaudio-5.0.tar.gz
tar -zxvf pulseaudio-5.0.tar.gz
cd ~/Downloads/pulseaudio-5.0
./configure
cd ~/Downloads/xrdp/sesman/chansrv/pulse
sudo sed -i 's/PULSE_DIR = \/home\/lk\/pulseaudio-1.1/PULSE_DIR = \/home\/pi\/Downloads\/pulseaudio-5.0/g' Makefile
sudo make
sudo cp *.so /usr/lib/pulse-5.0/modules/
cd ~
sudo cp /etc/pulse/default.pa ~
sudo sed -i -e '$amodule-xrdp-sink.so' /etc/pulse/default.pa
sudo sed -i -e '$amodule-xrdp-source.so' /etc/pulse/default.pa

これで完了です。RPi3を再起動しましょう。
ちなみにこのサイトの手順でX11RDP-o-maticを動かすとコンパイルエラーが出てしまい完了できませんでした。

音が出ない時のサウンドの出力先は次のようになっています。

xrdpのsinkデバイスを認識すると次のようになります。

YouTubeにつないで再生したら無事にWindowsパソコンから音が出ました。

まとめ

新しいOSイメージ、xrdpのバージョンアップと変な時期に記事を書いてしまいました。とても時間がかかりましたが、リモートデスクトップでRPi3へ接続できるようになりました。クリップボードを使いたいがためにとんでもない時間を食ってしまった。
ドライブのリダイレクトもできましたし音も出せます。

MATEデスクトップを日本語にしたいのですが成功してません。どうすればいいんだろう。

Griggon氏のページのコメントにありますがスクリプトの改良予定はあるようです。
またX11rdp-o-maticの方も大改修中のようで近々新しいバージョンが出そうです。xrdpが新しいバージョンになったのでもうすぐでしょうか。RPiでももっと簡単にxrdpのフル機能が使えるようになることを期待してしまいます。

なんとか記事にしましたが、半年後にやったらできない自信があります!

【2017/4/3 追記
より新しい方法は
xrdp v0.9.1をRaspberry Pi 3にインストールする
をご覧ください。】



コメント

最近のコメント

Threaded Recent Comments will be here.