gnome-remote-desktopはGNOME環境で構成できるRDPサーバ。
システムの設定設定アプリ( gnome-control-center)から設定が可能。
またCLIでも設定が可能だが自力で証明書を作成する必要があり、
opensslコマンド等の知見が多少必要になる。
ディストロとクライアントソフトウェアについて
ubuntu、debianで設定方法を確認し、サーバ側はディストリビューションのメジャーバージョンは特に気にしなくて問題なさそうだが、クライアント側はubuntu24.04やdebian12で
2026年6月現在バグが残ったままのようである。
- ubuntu24.04ではgnome-connectionsやremmina, krdc(KDE標準のRDPクライアント。トラブルシューティングの一環で使用)などメジャーなRDPクライアントから
接続を試みたがいずれもセッション確立後に画面が真っ黒のまま表示されなかった。
/etc/gdm3/custom.confでWaylandEnable=falseの設定を変えたり、
freerdp3-x11パッケージをインストールしてみたりと試してみたが効果なし。 - ubuntu26.04では上記のクライアントソフト全てで正常なリモートログインができることを確認。
- debian12ではremminaでは問題なくリモートログインができたが、
gnome-remote-desktopとkrdcではログインできず。
debian13ではubuntu26.04同様上記すべてのクライアントソフトで
リモートログインできることを確認。
クライアント各構成情報(2026年6月14日現在)
| クライアント | カーネル | gnome-connections バージョン |
remmina バージョン |
krdc バージョン |
|---|---|---|---|---|
| ubuntu24.04 | 6.17.0-35-generic | 46.0-2 | 1.4.35 | 23.08.5 |
| ubuntu26.04 | 7.0.0-22-generic | 49.0-1 | 1.4.40 | 25.12.3 |
| debian12 | 6.1.0-49-amd64 | 43.0-1 | 1.4.29 | 22.12.3 |
| debian13 | 6.12.90+deb13.1-amd64 | 48.0-2 | 1.4.39 | 25.04.3 |
サーバ設定方法
基本方針
- ファイアウォールやApparmorは必要に応じて設定すること。
今回はどちらもオフにしている。 - GUIは意識するところが少ない。表示通りのUIに従って素直に設定すればいい。
- CLIから設定する場合は
grdctlコマンドから行う - RDPサーバでは証明書の作成が必要になり、今回はopensslを使う。
署名に使う鍵も同一サーバで作成する(いわゆるオレオレ証明書)。
GUIではリモデを有効化した時点でバックグラウンドで自動的に証明書の作成が行われている。
参考: TLSハンドシェイク
証明書とその署名に使われる秘密鍵はSSHにおける公開鍵と秘密鍵の関係、使い方とだいたい同じ。
- 暗号化: 公開鍵は暗号化に用いるTLSのセッション鍵の交換で使用される。
- サーバ認証: 別マシンに同じIP、ホスト名が設定された場合や、
攻撃者によって偽サーバを建てられた場合など、サーバの同一性を確認できる。
TLSハンドシェイクの大雑把な流れ:
- 接続要求: クライアントがサーバの特定ポートにTCP接続し、TLSハンドシェイクを開始する。
- サーバが証明書を送る: サーバは自身の証明書(公開鍵、CN等の情報、署名)をクライアントに送る。
- クライアントが検証:
- 初回接続では「この証明書を信頼するか?」と確認する
(Trust On First Use, TOFU) - 2回目以降では前回保存した証明書と一致するか確認
- 初回接続では「この証明書を信頼するか?」と確認する
- セッション鍵の交換: クライアントはセッション間で有効な共通鍵、セッション鍵をランダムに作成する。この鍵はサーバの公開鍵で暗号化してサーバに送る。
- サーバが秘密鍵で復号: 公開鍵で暗号化されたデータは対応する秘密鍵でのみ復号可能であることを利用し、サーバがセッション鍵を取得する。
- セッション鍵で暗号化通信: 以降は共通鍵を使って画面転送、キーボード入力、クリップボードなどのデータを暗号化してやり取りする。
参考: NLA
RDPではセッション確立時にユーザ名・パスワードの入力が求められるが、
これはNLA(Network Level Authentication)と呼ばれる仕組みによる認証である。
RDPはMicrosoftが事実上の標準として確立し、その後仕様を公開したプロトコル である。
NLAはCredSSPというプロトコル上で実装され、その内部でWindows由来の認証方式(NTLM/Kerberos)が使われる。
gnome-remote-desktopではRDPサーバを構成する際にNLA認証用の
ユーザ名、パスワードを設定するが、これはLinuxの/etc/passwdとは独立した値である。
useraddやpasswdなどで新規ユーザの作成、登録は不要で、
ここで設定するユーザ名・パスワードが Linuxユーザとして存在している必要もない。
GUI
※Ubuntu24.04、Ubuntu26.04の場合
システムの設定画面を開く。
画面右上をクリックして歯車マークをクリックするか、CLIでgnome-control-centerを実行する。
画面左側のメニューからSystemを選択し、Remote Desktopをクリック
Remote Loginタブをクリック
リモデを有効化するため認証を行う。画面上側のSome settings are lockedの右側のUnlockボタンをクリック。続けてパスワード入力を行う。
Remote LoginのメニューでRDPサーバを有効化する。
Login DetailsでNLA認証用のユーザ名とパスワードを入力する。
CLI
grdctlコマンドから設定を行う。
CERT_DIR="/var/lib/gnome-remote-desktop/.local/share/gnome-remote-desktop/certificates"
TLS_KEY=${CERT_DIR}/rdp-tls.key
TLS_CRT=${CERT_DIR}/rdp-tls.crt
sudo mkdir -p ${CERT_DIR}
sudo openssl req -new -newkey rsa:4096 -days 720 -nodes -x509 -subj "/C=JP/CN=gnome-remote-desktop" -keyout ${TLS_KEY} -out ${TLS_CRT}
sudo chown -R gnome-remote-desktop: ${CERT_DIR}
sudo chmod 600 ${TLS_KEY}
sudo grdctl --system rdp enable
sudo grdctl --system rdp set-tls-key ${TLS_KEY}
sudo grdctl --system rdp set-tls-cert ${TLS_CRT}
sudo grdctl --system rdp set-credentials "rlogin" "rlogin"
sudo systemctl restart gnome-remote-desktop
/var/lib/gnome-remote-desktopはgnome-remote-desktopユーザの
ホームディレクトリになっている。これは/etc/passwdでgrepすると確認できる。
よって変数CERT_DIRは~gnome-remote-desktop/.local/share/gnome-remote-desktop/certificatesとして設定してもいいらしい。
変数展開で不安があるなら上記手順のように絶対パスで、
ディストリビューションの違いなど環境を意識せずに描きたい場合は~gnome-remote-desktopの書き方を使えばいい。
chownやchmodによるパーミッション変更については、最低限gnome-remote-desktopユーザが
秘密鍵を読み取りできさえすればいい。
grdctlで--systemをつけないとコマンドを実行するユーザの デスクトップ共有
(Desktop Sharing)が設定される。
リモートログイン(Remote Login)ではなくデスクトップ共有の場合、
リモデでログインするにはGUIから一度そのユーザにログインする必要があり、
また再起動するたびにGUIログインが必要になる。
(nmap等で確認するとGUIログインしていないとポートが閉じている)
また--systemをつけない場合について、grdctl rdp disable-view-onlyを実行してもリモートログインは設定されず、GUIでデスクトップ共有のRemote Controlを有効化したのと同じ扱いになり、
やはりGUIログインしないとRDPクライアントからログインできない。
grdctlでは--headlessというオプションもあるようだがこちらではうまくRDPサーバを設定できなかった。今後要確認。
opensslで作成する証明書について、
GUIでRDPサーバを設定した場合の証明書に限りなく近づけるなら
ubuntu24.04では以下のようなコマンドにする。
openssl req -new -newkey rsa:4096 -days 730 -nodes -x509 -sha384 -subj "/CN=GNOME/C=US" -keyout ${TLS_KEY} -out ${TLS_CRT}
パラメータについてGUIでRDPサーバを設定後、sudo find / -name "rdp-tls.*" 2>/dev/nullのようなコマンドで
証明書、秘密鍵の場所を探し、次のコマンドで証明書の内容確認をする。
openssl x509 -in ${TLS_CRT} -noout -text
確認
GUIでは画面から目視で確認する。
CLIではsudo grdctl --system statusで確認する。
状態確認でもsudoが必要になる。
以下出力例
Overall:
Unit status: active
RDP:
Status: enabled
Port: 3389
TLS certificate: /var/lib/gnome-remote-desktop/.local/share/gnome-remote-desktop/certificates/rdp-tls.crt
TLS fingerprint: c6:4f:f9:91:b0:d3:a5:c7:5b:7c:5f:af:2a:2e:50:d1:08:34:6f:fb:28:11:50:40:2c:2c:90:57:fc:be:ea:56
TLS key: /var/lib/gnome-remote-desktop/.local/share/gnome-remote-desktop/certificates/rdp-tls.key
Username: (hidden)
Password: (hidden)
確認観点
- Status:
enabledになっていること - TLS certificate, TLS key: 証明書、鍵のパスが設定されていること
- Username, Password:
(empty)になっていないこと
鍵についてはgnome-remote-desktopユーザが読み取り可能でないとクライアントから接続できない場合がある。
クライアントからの接続確認
gnome-connectionsでの接続方法
クライアントソフトを起動して、左上の+ボタンから新規接続先メニューを作成する。
接続先のRDPサーバを指定する(IPアドレス、ホスト名)。
フィンガープリントを確認する。
サーバでのGUIやsudo grdctl --system statusなどからフィンガープリントを確認する。
NLA認証用のユーザ、パスワードを入力する。
通常のGUIログイン同様、ディスプレイマネージャが表示されるので、
ユーザを選択してログインする。










