追記(2023/11/30): 2023年に発表されたRPI OS Bookwormに対応したリモートデスクトップの解説も書きました。
前回のブログポストでは、SoqAlbumでスマホとラズパイを接続するデモ動画を作りました。
この時macからラズパイにリモート接続しました(mac上でRPI OSが動いているように見えますが、これはリモート接続です)十分実用的な速度でリモート環境が動いていることが分かるでしょう。
動画用にクリーンな環境を作りたかったので、SDカードにRaspberry PI OS (debian Bullseye相当 64bit)を新たにインストール。RPI 4B 8GBを起動。動画撮影に必要なリモート接続アプリ(xrdp)をインストールしてmacから接続しようとしたのですが、画面が真っ黒で接続できません。バグです。大変困りました。
開発元githubのissueページやstackexchange等を参考に、小一時間かけてラズパイを修正、どうにか接続に成功。無事動画を撮影できてよかったのですが…冷静に考えれば、現状、xrdpのほうがSoqAlbumよりも需要があるのではないかと(笑) そういうわけで今回はラズパイの設定でやったことをここで共有することにします。
Winとmacの両方からマイクロソフト製のクライアントでアクセスできるので、リモートデスクトップは使うことができれば大変便利なツールなのですが、Bullseyeの場合エラーのせいで初心者には敷居が高いものになってしまっています。少しの修正で利用できるようになるはずですので、うまくいかない場合は下の対策を試してみてください。
win/macからリモートデスクトップでラズパイにログインするまで
ラズパイにはxrdpをインストール、win/macにはマイクロソフトのクライアントを準備
ラズパイ側にxrdpをインストールします。
sudo apt update
sudo apt install xrdp
/sbin/ifconfig
最後のコマンドからラズパイに振られたIPアドレスが分かります(wifiならwlan0の部分)
(おそらく?)Windowsの場合もとからクライアントがインストールされているはずです。macの場合はApp Storeから「Microsoft Remote Desktop」をインストールできます。
このクライアントでifconfigで調べたIPアドレスにアクセスするだけなはずなのですが、 バグで画面が真っ暗になる場合があるので、その場合は以下のように設定を修正します。
接続できない場合の設定の修正
一番重要な修正
- (修正A) sudo nano /etc/X11/xrdp/xorg.conf で、以下のように修正
#Option "DRMDevice" "/dev/dri/renderD128"
Option "DRMDevice" ""
たぶんやったほうがいい修正
- (修正B) sudo nano /usr/bin/startlxde-pi で、以下のように修正
if [ $TOTAL_MEM -ge 20480 ] && [ -f /usr/bin/mutter ] && [ -z "$VNC" ] ; then
2048 => 20480 と値を10倍にしています。
関係ないと思うけど、一応やっておいた修正
- (修正C) sudo raspi-config で Advanced Options > Compositor をオフ
以上の設定後、 再起動、もしくはxrdp関係で暴走しているプロセスがあればkill
これでリモート接続できるはずです。
解説
修正A /dev/dri/renderD128をxrdpで使わない
問題の根本的原因はデバイス/dev/dri/renderD128をxrdpで使用しようとしていることのようです(glamorモジュールがこける?) xrdpのxorg.confで/dev/dri/renderD128を利用しないように設定して問題を回避します。
なお今回編集したxorg.confはxrdp専用です。ラズパイのHDMI側のディスプレイ出力には影響ありません。
修正B ウインドウマネージャをmutterからopenboxに戻す
これは RPI 4B 2GB, 4GB, 8GB以外では必要ありません。 これらの機種限定でウィンドウマネージャとしてopenboxに変わりmutterが利用されますが、これをopenboxに戻します。 2048=2GBというしきい値を10倍の20480=20GBにして8GBでもmutterが選択されないようにします。
mutterとxrdpがぶつかる(タイトルバーが消える?)という報告がある一方で、それは新しいxrdpで解決済みだという書き込みもあったので、この修正は必須ではないかもしれません。ただ修正AでrenderD128(たぶんGPUがらみのデバイス)を使わない設定にしたこともありますし、画面処理の負荷が増しそうなmutterは外したほうが軽快になるのではないかと思います。
RPIは将来的にwaylandへの移行を考えていて、waylandでも動くmutterの導入を行ったようなのですが、mutterはgnome等と組み合わせないと意味がないように思えます。
修正C xcompmgrを無効
xcompmgrはそのままでもxrdpで利用されることはなかったように思うので修正は必要ないかもしれませんが、gpuがらみの設定なので一応書いておきました。
xrdpとは関係ありませんが、ラズパイに接続したテレビなどでyoutube等の動画を見たいという人はxcompmgrを必ずオフにしてください。画面のチラツキ(screen tearing)が激減します。
screen tearingについては次の動画をテレビ・ディスプレイで見てみてください。画面に横線が見える場合、テレビとラズパイの間で同期が取れていません。なおリモート環境(今日紹介したxrdp)で動画の鑑賞は難しいです。
xcompmgrはX11の古い画面処理実装にgpu処理を取り込む設定なんですが、おそらくはxcompmgrの実装がざるすぎて動画では処理が追いついていないように見えます。ウインドウの見た目がかっこよくなる(影がつく)効果はあるので、動画を見ない人は入れておいても良いかもしれません。
やらなくていい修正
ディスプレイからのログイン専用ユーザーとxrdp専用のユーザーをそれぞれ用意する、という書き込みもあるのですが、これは必要ありません。この方法は実際効果がありました。理由は
- ディスプレイ専用user A, renderグループに所属、ディスプレイからログイン時/dev/dri/renderD128利用
- xrdp専用user B, renderグループに所属しない、xrdpでログイン時パーミションの関係で/dev/dri/renderD128は利用しない
という使い分けになっているからだと思います。ただ修正Aがあれば一つのユーザーでディスプレイとxrdpの両方にログインできます。
似た対策として、ユーザーをrenderとvideoグループから外すというものもあったのですが、これも修正Aだけでいけるのではないかと思います。
まとめ
最新のラズパイ(Raspberry PI 4B)であれば、win/macからリモート接続して、実用的な速度でラズパイデスクトップ環境を利用できます。コロナ禍が始まってからリモートの作業環境が注目されていますが、ラズパイほど安価に用意できるリモート環境は他にないのではないでしょうか。ブログにのせる画像ファイルのサイズが大きすぎる場合など、Linuxに送ればコマンドラインでさっとサイズを下げられたりして重宝します。消費電力の少ないラズパイは24時間連続可動させても電気代は微々たるもの。小さなサイズで、使いたいときにいつでもさっと使えるデスクトップ環境を、ラズパイを使って用意してみてはいかがでしょうか。
コメント