0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Waylandで動作するrdpサーバーをraspberry piで動かす

0
Posted at

3行で要約

  • lamco-rdp-serverはwaylandで動作するrdpサーバー
  • まだ発展途上で面白いけどおすすめできる完成度ではない
  • とりあえず使いたい人向けの手順を公開

無料で安定したrdpサーバーをお求めの方はこの先は読まなくてOK。

自宅で組み込み環境で遊ぶ用途であれば、面白いソフトなのでこの記事を読んで活用して頂きたい。

はじめに

こちらの記事で、wayland で動作する rdpサーバーを調査しました。

Ubuntu のデフォルトが wayland に変更されましたが、Ubuntuの標準のrdpサーバーがそのまま使えるという優秀な結果だったのですが、
raspberry pi OSは、別途調査が必要という宿題が残っている状況でした。

前回のwaylandで動作するrdpの調査でUbuntu標準rdpの次点の候補は、lamco-rdp-server でした。
ネットの調査では開発中のため機能制限が多く活用が難しそうだったので保留していました。

今回は、いろいろ動作確認してみたので結果を記事にして残しておきます。

lamco-rdp-serverとは

プロジェクトページと GitHub にあるとおり、Rust で書かれた Linux 向けの Wayland ネイティブ RDP サーバーです。

xrdpはヘッドレス運用のために独自のログイン画面を持ち、デスクトップセッションを作成します。
lamco-rdp-server は、すでに動いている Waylandの画面をキャプチャして、マウスとキーボード操作を流すようです。ディスプレイ表示しているログイン済みの画面を共有する動作です。

ライセンス

私が把握した内容で書きますが、特殊なので正式な内容は原文を参照してほしいです。

ライセンスは 一般的なオープンソースライセンスではありません。

原文は Lamco RDP Server License を参照してください。

無料で利用してよいのは以下の場合のみ

  1. 非営利団体
  2. サーバーインスタンスが1台
  3. 非商用の教育または研究である
  4. Community Edition (Flatpak と Snap から利用するパターン)

上記以外は商用ライセンスが必要です。

Raspberry Pi に apt で入れるネイティブ版は Community Edition ではありません。
無料の範囲で使うには、サーバーインスタンス1台の範囲での利用になりますので、ご注意ください。

特徴的なのは、2029/6/1 に Apache License 2.0 になるそうです。
ライセンスが緩くなると利用者も増えそうなので、今のうちに触っておくと知識として役に立ちそう。

パッケージ

配布方法は2種類あります。

  • Native Package
    apt でインストールする方法です。本記事で説明する手順です。
  • Community Edition
    Flatpak と Snap。台数無制限で無料です。

Raspberry Pi では Native Package のみ対応です。
Flatpak に arm64 ビルドが無く動作しませんでした。

apt のパッケージは arm64 だけなので、32bit 版の OS では動作しないと思います。

Native Package を無料で使うには、サーバーインスタンス1台の制限があることに注意が必要です。

調査環境と結果

次の環境で確認しました。

  • Raspberry Pi 3 Model B+(waylandを動作させるにはスペック低め)
  • Raspberry Pi OS 64bit
  • 公式 7 インチタッチディスプレイ
  • lamco-rdp-server 1.4.5
  • 接続元は Windows のリモートデスクトップ接続(mstsc)

動作確認できたことをまとめると以下のような感じ。

  • デスクトップの表示、マウス、キーボードは動く
  • テキストのコピー&ペーストは動く
  • ファイルのコピーは微妙。Windowsでコピーすると、貼り付けなくても Pi の ~/Downloads に勝手にファイルが保存されている。セキュリティ上問題がある。Pi側のファイルマネージャへの貼り付けは失敗する。PiからWindowsへのファイル転送は届かない
  • ディスプレイを外すと動かない、解像度は物理画面のまま
  • 認証系の動作は微妙。mstscのログイン画面とうまく連動しないので実用レベルではなかった。なので、認証OFFにすることになりますが、誰でも操作可能になってしまう。私は後述のsshポート転送で認証して使いました。(VNCみたいな使い方ですね)
  • 体感は重い。FPSを30から15に下げると、CPU使用はおおよそ半分になったが、カーソルの残像が見えたりします。
  • サービスを起動した時点でキャプチャが始まる。誰も接続していなくても labwc の CPU を使い続ける。使わないときは stop などの工夫が必要
  • systemctl --user enable だけでは、OS起動後にサービスが上がらないのですこし設定が必要。CPU使うので自動起動しない想定なのかもです。

かなり限定的な使い方になると思います。

おすすめの使い方

ここからは、インストールと設定について説明します。

認証なしで動かす手順のあと、3389ポートを閉じてSSH経由で入る手順を書きます。

※Raspberry Piにディスプレイを接続して以下の設定を行いました。

セキュリティ無しで動かす

インストール方法

Waylandセッションであることを確認します。

echo $XDG_SESSION_TYPE

wayland と表示されることを確認します。

違う場合は、次のraspi-configでwaylandにしてください。

sudo raspi-config

# Advanced Options → Wayland
# System Options → Boot / Auto Login → Desktop Autologin

署名鍵とリポジトリを登録して、aptでインストールし、インストール状況の確認を行います。

# 署名鍵
curl -fsSL https://apt.lamco.ai/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/lamco.gpg

# リポジトリ
echo "deb [signed-by=/usr/share/keyrings/lamco.gpg] https://apt.lamco.ai stable main" | sudo tee /etc/apt/sources.list.d/lamco.list

sudo apt update
sudo apt install lamco-rdp-server

# 入ったバージョンと能力の確認
apt policy lamco-rdp-server
lamco-rdp-server --show-capabilities

--show-capabilities の出力はエラーっぽいのもありますが、無視して設定ファイルを作成します。

設定ファイル編集

出力したテンプレートの設定ファイルを編集します。
不足があるとmissing fieldになるので設定ファイルを手動で作成するのは推奨しません。

# 設定テンプレートを出力
mkdir -p ~/.config/lamco-rdp-server
lamco-rdp-server --generate-config > ~/.config/lamco-rdp-server/config.toml

生成したファイルから、以下を編集します。

config.toml
[security]
auth_method = "none"
security_mode = "tls"
cert_path = "/home/<ユーザー名>/.config/lamco-rdp-server/cert.pem"
key_path  = "/home/<ユーザー名>/.config/lamco-rdp-server/key.pem"

[clipboard]
allowed_types = ["text", "html", "image", "files"]

認証は none にします。pamでもサービスは起動しますがmstscとの相性が悪いです。

通信方式は tls のままです。証明書の初期値は /etc ですが、ユーザーサービスは/etcに書けないので変更します。起動時に自己署名証明書が生成されます。

allowed_types は ["text","html","image","files"] にしましたがtextとfilesしか動作確認してないです。

デフォルトでは重いのでFPSを調整しました。
FPSは3か所あるので同じ値にしています。

config.toml
[video]
target_fps = 15

[video_pipeline.processor]
target_fps = 15

[performance.adaptive_fps]
max_fps = 15

接続中の top で確認した感じでは、30fpsの場合labwc=72%、15fpsの場合labwc=38%でした。

設定ファイルは起動時にだけ読まれます。書き換えたあとはサービスを再起動します。

起動方法

ディレクトリ

起動に必要なディレクトリを作成します。

mkdir -p ~/.local/share/lamco-rdp-server
mkdir -p ~/Downloads    # 日本語環境には無いことが多い

日本語環境では ダウンロード フォルダがありましたが、英語名の ~/Downloads が無いと起動しません。

※Windowsのクリップボードを参照し、ファイル形式だったら~/Downloadsに固定で保存する動作になっているようです。バグというか未完成状態でしょうか。

サービスの開始

# サービスの有効化
systemctl --user enable --now app-io.lamco.rdp-server.service
# サービスの状態確認
systemctl --user status app-io.lamco.rdp-server.service --no-pager

enable してもOS起動時にサービスは起動しません。WantedBy=graphical-session.targetを見ていますが、pi環境では連動しないようです。

正式な対応は謎ですが、調査した感じでは~/.config/labwc/autostart に追記することで起動するようになりました。

# OS再起動後にサービスを上げる
mkdir -p ~/.config/labwc
printf '%s\n' 'systemctl --user start app-io.lamco.rdp-server.service' > ~/.config/labwc/autostart

手動で起動、停止、ログ確認する場合は以下です。
CPUが重いので自動起動させずに、sshで繋いでからサービスを起動するほうがいいのかも。

# 起動
systemctl --user start app-io.lamco.rdp-server.service
# 停止
systemctl --user stop app-io.lamco.rdp-server.service
# ログ
sudo journalctl -b _SYSTEMD_USER_UNIT=app-io.lamco.rdp-server.service --no-pager

Windowsからの接続テスト

mstscを起動して、コンピューター欄に接続先PiのIPかhostnameを入れて接続します。

client_1.png

認証OFFなので、ユーザー、パスワードは不要です。

接続ディスプレイの解像度固定なので、フルスクリーンの利用はできません。
フルスクリーンにならないように[オプションの表示]ボタン → [画面]タブ → 画面の設定のスライダを全画面以外にします。私は元画面に近い 1280*720 に設定。

client_1b.png

認証の警告が出ますが[はい]を選択します。

client_2.png

Windowsのデスクトップに、pi環境がウィンドウで表示されます。

client_3a.png

3389ポートを閉じてSSHポート転送で接続する

前章では認証OFFの為、だれでも利用可能になってしまいます。
LAN側からアクセスされないようにポートを閉じてssh経由で接続するようにします。
sshの認証を利用することで最低限のセキュリティを確保します。

SSHが無効だとトンネルを掘れません。raspi-config のSSHが有効になっていることを確認します。

sudo raspi-config

# Interface Options → SSH

config.toml の待ち受けをループバックに変えます。

config.toml
[server]
listen_addr = "127.0.0.1:3389"

サービスを再起動します。

systemctl --user restart app-io.lamco.rdp-server.service

LAN上のPCからは3389ポートにアクセスすることはできなくなります。

Windowsからの接続テスト

まずは、接続できないことを確認します。
mstscを起動して、コンピューター欄にPiのIPかhostnameを入れて接続すると失敗します。ノーガードのポートは閉じていることが確認できました。

WindowsからSSHのローカルポート転送でトンネルを用意します。
Windowsのターミナルで以下を実行します。ユーザー名とIPは差し替えてください

# このウィンドウは閉じない
ssh -L 3389:127.0.0.1:3389 <ユーザー名>@192.168.xx.xx

ターミナルは閉じないでください。ターミナル接続中のみトンネルが有効になります。

再度、mstsc を起動して、 localhostへ接続してください。

client_localhost_1.png

証明書のエラーがでますので「はい」で続行します。

client_localhost_2.png

トンネル経由で接続が行われ、接続が成功します。

client_localhost_3.png

トンネルを終了する場合は、mstscを×ボタンで閉じたあとにWindowsターミナル内でexitコマンドでssh接続を終了してください。

exit

おわりに

raspberry pi + Wayland環境で動作するrdpサーバーを探すという個人的な宿題は達成しましたが、実用レベルにはちょっと難しそうです。

まだ発展途上なソフトウェアなので、今後のアップデートに期待です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?