xrdp v0.9.1をRaspberry Pi 3にインストールする


xrdpのバージョン0.9.1がリリースされました。
RASPBIAN JESSIEにインストールする方法の2016年版として手順を書いておきます。



xrdpのバージョン0.9.1がリリースされました。関係者の皆様、ありがとうございます。とても便利なソフトウエアです。
Release notes for xrdp v0.9.1 (2016/12/21)

2016年のまとめてして現在のビルド手順を書いておきます。
今現在私の試したところではクリップボード、サウンド、ドライブのリダイレクトが使えています。
ですがビルド手順に若干の不具合があります。今回のリリースでインストールのスクリプト化ができるかと期待しましたが、まだできません。

変更点の確認

バージョン0.9.1で私が気になる点を挙げてみます。
  • Initial support for RemoteFX Codec (disabled by default)
  • Support clients that don't support drawing orders, such as MS RDP client for Android, ChromeRDP (disabled by default)
  • Added files for systemd support
RASPBIAN JESSIE WITH PIXELで使うにはsystemdサポートというのが役に立ちます。インストールがとても簡単になりました。
RemoteFXもビルド手順が簡潔になりました。

最も気になっていたのはandroidのリモートデスクトップアプリから使えるようになるというものです。
残念ながらDebianではまだ動かないようです。Microsoft Remote Desktopから接続するとマウスカーソルは現れますがログインウインドウが描画されません。
【公開日の17:45に修正:
Microsoft Remote Desktopで接続できました。betaでなくても接続できます。


Raspberry Pi 3でビルドしてインストールする

RASPBIAN JESSIE PIXEL Version:November 2016 を使います。

ビルドとインストール手順の確認

新バージョンのリリースと共にドキュメントも更新されているようです。一通り目を通しましょう。
Building on Debian 8 neutrinolabs/xrdp
Compiling and using xorgxrdp
Audio Output Virtual Channel support in xrdp

Raspberry Pi 3の更新

sudo apt-get -y update
sudo apt-get -y upgrade
リポジトリをアップデートします。ファームウエアの更新もあるようです。
バージョンは次のようになっています。
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux

ビルドする

それではビルドしてみます。ソースはgitで取ってきます。ホームディレクトリのDownloadsフォルダで作業します。
Windowsパソコンでこのページを表示してコマンドをコピペする方は改行コードに気を付けてください。改行コードが異なるため動かない場合があります。

必要なパッケージをインストールします。
sudo apt-get -y install libx11-dev libxfixes-dev libssl-dev libpam0g-dev libtool libjpeg-dev flex bison gettext autoconf libxml-parser-perl libfuse-dev xsltproc libxrandr-dev python-libxml2 nasm xserver-xorg-dev fuse libmp3lame-dev

ソースを取得します。
cd ~/Downloads
git clone https://github.com/neutrinolabs/xrdp.git
git clone  https://github.com/neutrinolabs/xorgxrdp.git
バージョンを確認します。
cd xrdp
git tag -l
バージョン0.9.1を使いますが次のコマンドはやらなくてもいいと思います。何かおかしいときの避難場所です。develブランチを選べば最新版を試せます。
git checkout refs/tags/v0.9.1
サブモジュールを更新します。ここでサブモジュールのmakeをするのかしないのかわからなくなりました。makeしなくとも後でまとめてやってくれるようになったと思うのですが。
git submodule init
git submodule update
コンパイルします。"--enable-painter"とするとandroidアプリから使えるようになります。なるらしいのですが成功していません。オプションの意味がわかりずらくこれらの指定で良いのかわかりません。
./bootstrap
./configure --enable-fuse --enable-rfxcodec --enable-mp3lame --enable-pixman --enable-painter --disable-ipv6
sudo make -j4
sudo make install
cd ..

次にxorgxrdpをビルドします。
このまま行うとmakeがエラーで終了します。fontutil.hが無いためです。なぜ存在しなくなったのかわかりません。10月ごろは問題なくビルドできていましたけど。
/usr/include/X11/fontsフォルダにfontutil.hファイルを作ってください。ファイルの中身は検索して入れてください。

ファイルを入れたら続けます。
cd xorgxrdp
sudo ./bootstrap
sudo ./configure
sudo make -j4
sudo make install
cd ..

音を出すためpulseaudioのsinkモジュールを作る

音を出すためにpulseaudioのsinkモジュールを作ります。
sudo apt-get install -y intltool 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 ~
【公開日に追記: piユーザのホームディレクトリの例を書いています。PULSE_DIRを確認してください。

以前の私の手順ではpulseaudioのsinkモジュールを動かすために"/etc/pulse/default.pa"ファイルを編集していましたが、その必要はありませんでした。
xrdp接続時には"/etc/xrdp/pulse/default.pa"が読み込まれます。このファイルにはすでにsinkモジュールを呼び出す記述がされています。
上で紹介した"Audio Output Virtual Channel support in xrdp"に書かれていました。

設定ファイルを修正する

xrdpの設定ファイルを修正します。
sudo sed -i.bak 's/^\(EnvironmentFile.*sysconfig.*\)/#\1/' /lib/systemd/system/xrdp.service
sudo sed -i 's/^\(EnvironmentFile.*\)\(\/etc\/default\/xrdp\)/\1\/etc\/xrdp/' /lib/systemd/system/xrdp.service
sudo sed -i 's/^\(ExecStart.*\)\(\/usr\/sbin\/xrdp\)\(.*\)/\1\/usr\/local\/sbin\/xrdp\3/' /lib/systemd/system/xrdp.service
sudo sed -i 's/^\(ExecStop.*\)\(\/usr\/sbin\/xrdp\)\(.*\)/\1\/usr\/local\/sbin\/xrdp\3/' /lib/systemd/system/xrdp.service

sudo sed -i.bak 's/^\(EnvironmentFile.*sysconfig.*\)/#\1/' /lib/systemd/system/xrdp-sesman.service
sudo sed -i 's/^\(EnvironmentFile.*\)\(\/etc\/default\/xrdp\)/\1\/etc\/xrdp/' /lib/systemd/system/xrdp-sesman.service
sudo sed -i 's/^\(ExecStart.*\)\(\/usr\/sbin\/xrdp\)\(.*\)/\1\/usr\/local\/sbin\/xrdp\3/' /lib/systemd/system/xrdp-sesman.service
sudo sed -i 's/^\(ExecStop.*\)\(\/usr\/sbin\/xrdp\)\(.*\)/\1\/usr\/local\/sbin\/xrdp\3/' /lib/systemd/system/xrdp-sesman.service
サービスに登録します。
sudo systemctl daemon-reload
sudo systemctl enable xrdp.service
sudo systemctl start xrdp.service

この後再起動します。

リモートデスクトップで接続してみる

再起動したらもうリモートデスクトップで接続できるはずです。Windowsのリモートデスクトップが良いでしょう。


ログイン画面が出たら半分成功です。
"Session"ではXorgを選択します。X11rdpでは動きません。vncサーバをインストールしていればXvncでも接続できるはずですが、rdpではなくvncを使うためxrdpを使う意味はほとんどありません。

セッションを正しく選択しユーザ名とパスワードを入れてOKを押せばデスクトップが表示されるでしょう。

最初にXorgが選択されていないのは面倒です。/etc/xrdp/xrdp.iniファイルを編集し[Xorg]セクションを[X11rdp]セクションの前に移動しましょう。

音を出す

デスクトップが表示されて安心したところで音がでない事に気づくと思います。pulseaudioが動いていないためです。
デスクトップが表示されたらターミナルを開いて次のコマンドを入れてください。
start-pulseaudio-x11
このコマンドを自動で動かせばわざわざ手で入れる必要はなくなるのですが、どこに書けばいいのか未だにわかりません。

sudoでウインドウが開かない

最近リポジトリの更新をしたらsudoでテキストエディタなどを開けなくなりました。raspbianの何かが変わったようです。そんな時は次のコマンドを入れます。
xhost +

まとめ

まとまってないまとめです。

9月にRaspberry Pi 3を買ってからコンパイルばかりしています。やっとdebian jessieの設定の仕方が分かってきたような気がします。

当初、xrdpをビルドして動かすのはとても面倒なことだと思っていました。jessieでの情報がとても少なかったからです。他のディストリビューションでの不具合も目についてしまいます。
ですが今はコンパイルするだけで動くと言ってもいいくらい簡単になっています。

リポジトリにもxrdpはあります。ですがバージョン0.6ととても古いです。クリップボードのリダイレクトすら動きません。リポジトリからインストールする意味は全く無いでしょう。
ソースからのインストールはとても簡単です。ぜひ試してください。

まだandroidのRD Clientから接続できないのが残念です。どこか手順を間違えているのでしょうか?debianではxorgxrdpにも修正が必要なようです。次のリリースにはできるようになるのでしょうか。
【公開日の17:45に修正:
androidのアプリ Microsoft Remote Desktopで接続できました。
アプリにユーザIDを登録すればログイン画面は表示されずすぐにデスクトップが表示されます。デスクトップ解像度も任意に設定できて大変便利です。クリップボード、ドライブ、サウンドのリダイレクトもできました。
ただしサウンドは途切れ途切れになってしまいます。YouTube再生時のCPU負荷は45%ほどでした。パソコンとandroidでCPU負荷に違いはありません。android側のデコードが間に合わないのでしょうかね。
パソコンとandoroidで解像度が違うと同じセッションを維持できないようです。

昨日インストールした直後は動きませんでした。アップデートもコンパイルのし直しもしていないのに今試したら動きました。動かなかったのはなんだったんだろう・・・ 理由がわからずに症状が変わる・・・


raspbianで未だにわからないのはスタートアップスクリプトを書いておく場所です。
start-pulseaudio-x11は重複起動とか面倒を見てくれているようなのでこれを使いたいのですが、それらしいファイルに追加しても起動してくれません。ウインドウができる前に呼ばれてる感じです。テキストエディタとかなら動くのになぁ。

今回はmateデスクトップを使っていません。気のせいかmateの方が軽い気がします。mate入れようかな・・・

Linuxユーザの方にはxrdpを使う意味はほとんど無いでしょうが、raspberry piで遊ぶwindowsユーザにとっては必須のソフトウエアと言えるでしょう。
ラズパイ専用のモニタやキーボードが無いという方にはなおさらです・・・それ私ですけど。

コメント

最近のコメント

Threaded Recent Comments will be here.