Raspberry Piでxrdpをビルドして動かすのはとても簡単だった


前回xrdpのビルドをしました。fontutil.hが無いという良くわからない状況ですが動いています。
今回はxrdpの設定について整理します。セッションでXorgを選択する事が重要です。
Raspberry Piでxrdpをビルドして動かすのはとても簡単だとわかりました。以前のインストール方法は余計な事をやりすぎていました。



今回の記事は前回に引き続き日記です。xrdpを動かすためにやった事を書き留めています。

xrdpの設定がなんとなくわかってきたのでインストールし直してみる。
xrdpに動作に必要なファイルの置き場所が混乱する一つの原因のようだ。ディストリビューションにより初期設定ファイルの呼び出し方が違う。そのためファイルを置くべき場所も違う。巷にあるxrdpのインストール方法はraspbian jessieに少し合わないようだ。
xrdpのインストールはX11RDP-o-Maticを使う事を推奨している感じだが、このスクリプトでインストールできないディストリビューションだと手も足も出ないようになってしまう。皆何をしているか分からずに動かしているだろうからトラブった時の情報も少なくなっているようだ。

jessieのイメージから始めてxrdp関連のファイルがどこにできるかに注意していくことにする。

その前に、今回は度々薦めてきたSDカードを使ってみます。SamsungのEVO+です。
SDカードの速度については以前の記事を参照してください。
Raspberry Piには4kランダムリードライトが速いSDカードを使おう
今のところEVO+が一番良いようです。と書いておきながら私は買っていなかったのです。すみません。余ったSDカードがそこそこあるんですよね。
ですが、xrdpのコンパイルを何度もしていると何かおかしい事に気づきました。Raspberry Piがプチフリーズするんです。応答も遅い。こんなもんだっけ?
使っているSDカードのベンチマークを取ってみると・・・
4kランダムライト 244kB/s
・・・え? 遅すぎ。
という事で急きょEVO+を買いました。

ベンチマークをとってみると・・・
4kランダムライト 2560kB/s
・・・ 一桁速くなりました!4kランダムリードも8MB/s越えます。
他の高速なSDカードでもライト1MB/sほどのものが多いです。EVO+をお薦めします。
ビルドも断然速くなります。

閑話休題 文体も戻します・・・

前回の記事の繰り返しをする。設定ファイルがインストールされる場所に注意していく。
RASPBIAN JESSIE WITH PIXEL 11月末バージョンをインストールする。updateにupgradeをする。
この時点でxrdp関連のファイルは存在しない。
前回コンパイルできない原因だったfontutil.hはまだ無い。fontsフォルダごと無い。

xrdpに必要そうなパッケージをインストールする。
/usr/include/X11/fonts/ フォルダはできた。しかし、fontutil.hは無い。この時点で何かおかしい?

前回と順番が変わるがここでlibxfont-devのインストールを試みるも結果は前回と同じ。fontutil.hは消えたまま。

xrdpのインストールをする。
サブモジュールのビルドをする。
fontutil.hを自分で作る。

xorgxrdpをビルドする。前回は make -j4 とパラレルで行ったが
"警告:  時刻のずれを検出. 不完全なビルド結果になるかもしれません."が出るのが気になるので"-j4"を付けづにビルドする。
xorgxrdpをインストールする。

xrdpをビルドする。同じくシングルでmakeする。SDカードが速くなったのでシングルでもいける。
xrdpをインストールする。

以上でxrdpのビルドは終わった。あとは環境に合わせた設定をする。ここからは前回と手順を変えていく。

まずはxrdpのインストールをした直後にリブートする。
sudo reboot
再起動後、xrdpのプロセスなし。リモートデスクトップも当然応答しない。
サービスの登録をしてリブート。
sudo systemctl enable xrdp.service
sudo reboot
変わらずプロセス見えず。リモートデスクトップの応答なし。

/lib/systemd/system/xrdp.serviceファイルを編集する。
sudo nano /lib/systemd/system/xrdp.service

"EnvironmentFile=-/etc/sysconfig/xrdp"とあるがそんなフォルダは無いのでこの行をコメントアウト。
"EnvironmentFile=-/etc/default/xrdp"とあるがこれも無いので、"-/etc/xrdp"に代えてみる。
"ExecStart=/usr/local/sbin/xrdp $XRDP_OPTIONS"とあるがそこには無いので、"/usr/local/sbin/xrdp"に代える。
"ExecStop=/usr/sbin/xrdp $XRDP_OPTIONS --kill"も同じく"/usr/local/sbin/xrdp"に代える。
保存して終了する。

/lib/systemd/system/xrdp-sesman.serviceファイルを編集する。
sudo nano /lib/systemd/system/xrdp-sesman.service
xrdp.serviceとほぼ同じ行があるので同様に修正する。

一応サービスを再登録して再起動する。
sudo systemctl daemon-reload
sudo systemctl enable xrdp.service
sudo reboot

再起動後プロセスを確認する。
$ ps -A | grep xrdp
  587 ?        00:00:00 xrdp-sesman
  640 ?        00:00:00 xrdp
ちゃんと動いた。

リモートデスクトップで接続する。
ログイン画面が表示された。
X11rdpでログインしてみるとデスクトップは表示されない。

ここで改めてxrdpの説明を見直してみる。
そもそもX11rdpって何なのか?今回ビルドした気がしない。
xrdpのwikiに書いてあった。
Compiling and using xorgxrdp
"xorgxrdp is a collection of modules to be used with the pre-existing Xorg install to make the X server act like X11rdp. Unlike X11rdp, you don't have to recompile the whole X Window System. Instead, additional drivers are installed to a location where the existing Xorg installation would pick them."
xorgxrdpはX11rdpの様に振る舞うXorg用モジュールだそうだ。つまりX11rdpは無くてよい。
ページの下の方を見ると、
Use the "Xorg" (previously "Session manager") entry in the xrdp chooser when connected. The difference between "X11rdp" and "Xorg" entries in xrdp.ini in the value of the code key, which is 10 to X11rdp and 20 for Xorg.
SessionはXorgを選択しろとある。
リモートデスクトップのログイン画面が出たらSessionでXorgを選択する。


その後、ユーザー名とパスワードを入れて"OK"を押すと・・・


あっさりつながった。日本語環境もちゃんと引き継いでいる。パスワードを変えてないのばれた。

とても簡単だった。ちゃんと説明は読もう!

ディストリビューションの異なるインストール手順を参照したためにいらない設定をしてしまう事が多いようだ。そもそもconfigure時にautoconf が良きに計らってくれるのだろう。せっかく設定してくれたものを違うディストリビューションの例を見て、いじって動かなくしてしまう。

とはいえ少し修正をする。セッションの順番を変えて最初にXorgが選択されるようにしよう。
xrdp.iniを編集する。せっかくなのでリモートデスクトップで編集する。leafpadを使う。
sudo leafpad /etc/xrdp/xrdp.ini
注目する場所はここ
[X11rdp]
name=X11rdp
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=24
code=10

[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
X11rdpとXorgのセッションはほぼ同じ内容であることがわかる。先の引用に書いてあった通り違いはcodeの値である。10はX11rdp、20はXorg。libはともにlibxup.soとあるのでrdpを使っている。vncではない。
ここはログイン画面のメニューの順番にもなっている。最初にXorgを表示させるには[Xorg]セクションを[X11rdp]セクションの前にもってくればいいだけ。
ついでにusernameとpasswordを設定してもいい・・・がセキュリティには気を付けて。
順番を変えたら保存して終了。ログアウトしてリモートログインし直しXorgが最初に選択される事を確認する。

ここまででクリップボードとドライブのリダイレクトもできているはずだ。問題なく動作した。
xrdpのインストールは完了である。

ただし、サウンドのリダイレクトはまだ動かない。
続きの作業をする。pulseaudioのsinkモジュールを入れる必要がある。
必要なパッケージを追加する。
sudo apt-get install intltool libjson0-dev libsndfile1-dev libspeex-dev libspeexdsp-dev libcap-dev
pulseaudioのバージョンは5.0を使う。
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
再起動する。

あれ?音が出ない・・・mateデスクトップと何か違うのかな?
PIXELだとoutputの設定はどうしたらよいのだろう?
pacmd
PulseAudio デーモン自身が稼働していないか、又はセッションデーモンとして稼働していません。

あれれ。PulseAudioつかってないの?mate入れるかどうしようか。

調べるのに少し時間がかかりそうなのでここ終わる。
今回SDカードをEVO+にしたら、コンパイルが速くて快適だった。

【投稿日の20時に追記:
pulseaudioを動かせばxrdpで音が出せた
start-pulseaudio-x11
startwm.shのpost_startに入れておけばいいのかな。


コメント

最近のコメント

Threaded Recent Comments will be here.