HyprlandにWindows標準のRDP経由で接続する方法

5 min read

はじめに

最近Omarchyを利用したLinuxデスクトップをメインの開発環境として利用しています。 OmarchyをMinisforum MS-01に導入し、WayVNC経由でリモートデスクトップを行っています。

※WayVNC経由での接続方法は次の記事を参照してください。 https://www.munenick.me/blog/omarchy#vnc%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E6%88%90%E4%BB%BB%E6%84%8F

しかし、リモートデスクトップ元がWindowsなので標準搭載のRDPを利用したいという願望がありました。 そこで、xrdpを利用し、Windows標準のRDP経由でHyprlandに接続することができたので紹介します。

前提

xrdpとは

https://github.com/neutrinolabs/xrdp

“xrdp provides a graphical login to remote machines using RDP (Microsoft Remote Desktop Protocol). xrdp accepts connections from variety of RDP clients.”

仕組み

xrdpを利用し、標準RDP経由で接続は可能であるものの内部的にはWayVNCを利用しています。

xrdp --> wayvnc --> hyprland

理由としてはHyprlandにはRDP互換のバックエンドが存在しないため、xrdpが直接接続することができません。 なのでxrdp内に存在するlibvnc.so経由でWayVNCへブリッジし、画面を転送する仕組みとなっています。

不安定だよ

今回利用するxrdpは正式リリースバージョンではなく、特定のコミットバージョンを利用しています。 そのため、RDPの動的解像度変更に対応しておらず、RDP側のウィンドウサイズをいじると画面が暗転したり、接続が切れたりします。

正式リリース版ではなく、特定コミットを利用する理由は以下のPRがまだリリースに含まれていないためです。 https://github.com/neutrinolabs/xrdp/pull/3460

技術詳細

  • リリース版のxrdpで採用しているRFBのバージョンは3.3ですが、WayVNCが要求するRFBのバージョンは3.7以降となります。ここでバージョンミスマッチとなり、リリース版のxrdpではWayVNCに接続ができなくなります。

方法

Archlinux環境を前提に説明します。ほかのディストリビューションの型は都度コマンドを書き換えてください。

WayVNCの構成

  • WayVNCのインストール
sudo pacman -S wayvnc
  • Hyprlandのheadlessモニタの作成
hyprctl output create headless VNC-1
  • Hyprlandのheadlessモニタの解像度の設定 解像度はRDPクライアントの解像度に合わせることをお勧めします
hyprctl keyword monitor "VNC-1,1920x1080@60,auto,1"
  • WayVNCの起動
wayvnc -o VNC-1 127.0.0.1 5900

xrdpの構成

  • 依存パッケージのインストール 他に足りないものがあれば都度ダウンロードしてください。
sudo pacman -S nasm
  • xrdpのクローン
git clone https://github.com/neutrinolabs/xrdp.git
cd xrdp
git checkout 4b2155b6cf80c0411ffe8b5f1f7e3e4fae09e1a8
  • xrdpのインストール
./bootstrap
./configure
make
sudo make install
  • xrdpの設定 [Xvnc]というセクションがあるのでそこを書き換えてください。 デフォルトではusername, passwordになっていますが、pamusernamepampasswordに変更することに留意してください。
sudo vi /etc/xrdp/xrdp.ini

[Xvnc]
name=Xvnc
lib=libvnc.so
pamusername=ask
pampassword=ask
ip=127.0.0.1
port=5900
security_level=0
depth=24
  • xrdpの起動
sudo systemctl enable --now xrdp

クライアントから接続

  • WindowsのRDPクライアントを起動します

  • ログイン SessionをXvncにして、OSのユーザ情報を入力します。

  • 接続を確認 Hyprlandに接続できたら成功です。

おまけ

RDP接続時に自動でHyprlandに接続する

現状以下のようにxrdpのログイン画面が表示されますが、RDPの資格情報を利用してログインを行えるようにします。

  • 以下のように設定を構成します
sudo vi /etc/xrdp/xrdp.ini

[global]
autorun=Xvnc

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
pamusername=same
pampassword=same
ip=127.0.0.1
port=5900
security_level=0
depth=24
  • xrdpを再起動します
systemctl restart xrdp
  • クライアントで資格情報を入力します

  • xrdpのログイン画面をバイパスしてHyprlandに直接アクセス可能です

おわりに

まだまだ動作は不安定ですが、VNC経由よりも画面がきれいに映るので個人的にはこの方法を利用していこうと思います。

また、以下のPRでは正式にWayVNCへの対応を検討しているようです。 ここでは動的解像度変更への対応やオーディオの安定化が議論されています。 このPRが正式にマージされることを祈りましょう。

https://github.com/neutrinolabs/xrdp/pull/3587 https://github.com/neutrinolabs/xrdp/issues/2637