CentOSやRocky Linuxにxrdpをインストールしたものの、Windowsの「リモート デスクトップ接続」から接続できないことがあります。
xrdpで接続できない場合、闇雲に設定を変更するのではなく、
xrdpサービス → ポート → Firewall → SELinux → ログ
の順番で確認すると原因を切り分けやすくなります。
この記事では、CentOS/Rocky Linuxでxrdpに接続できない場合の確認方法を紹介します。

1. xrdpが起動しているか確認する
最初にxrdpサービスの状態を確認します。
systemctl status xrdp
正常に起動していれば、次のように表示されます。
Active: active (running)
inactive や failed になっている場合は、xrdpを起動します。
sudo systemctl start xrdp
OS起動時にも自動的にxrdpを起動したい場合は、次のコマンドを実行します。
sudo systemctl enable xrdp
両方をまとめて実行することもできます。
sudo systemctl enable --now xrdp
再度確認します。
systemctl status xrdp
ここでxrdp自体が起動しない場合は、Windows側を調査する前にxrdpのログを確認した方がよいでしょう。
2. TCP 3389番ポートで待ち受けているか確認する
xrdpは通常TCP 3389番ポートを使用します。
ssコマンドで確認します。
sudo ss -lntp | grep 3389
例えば、次のようにLISTENしていればxrdpが3389番ポートを待ち受けています。
LISTEN 0 2 0.0.0.0:3389 0.0.0.0:*
何も表示されない場合は、xrdpが正常に待ち受けていない可能性があります。
その場合は、
systemctl status xrdp
とログを確認します。
3. firewalldで3389/TCPが許可されているか確認する
xrdpが正常に起動していても、Linux側のFirewallで3389/TCPが遮断されていればWindowsから接続できません。
まず設定を確認します。
sudo firewall-cmd --list-all
または、
sudo firewall-cmd --list-ports
3389/TCPを許可する場合は、環境に応じた適切なゾーンを確認したうえで設定します。
例えば使用中のゾーンに追加する場合は、
sudo firewall-cmd --permanent --add-port=3389/tcp
sudo firewall-cmd --reload
設定後、
sudo firewall-cmd --list-ports
で、
3389/tcp
が表示されることを確認します。
注意: インターネットへ3389/TCPをそのまま公開することは推奨しません。社内LANやVPNなど、必要な接続元だけから利用できる構成にします。
4. Windowsから3389番ポートまで到達できるか確認する
Linux側だけでなくWindows側からも確認します。
PowerShellを開いて、
Test-NetConnection LinuxサーバーのIPアドレス -Port 3389
を実行します。
例えば、
Test-NetConnection 192.168.1.100 -Port 3389
です。
結果の、
TcpTestSucceeded : True
なら、少なくともWindowsからLinuxサーバーの3389/TCPまでは到達しています。
Falseなら、
- Linux側firewalld
- ネットワーク経路
- IPアドレス
- ルーターやFirewall
- xrdpの待ち受け状態
などを確認します。
ここで重要なのは、RDP画面の問題とネットワークの問題を分離することです。
5. SELinuxを確認する
CentOS/Rocky LinuxではSELinuxが有効になっていることがあります。
状態を確認します。
getenforce
例えば、
Enforcing
ならSELinuxが有効です。
SELinuxが原因と思われる場合でも、いきなり恒久的に無効化するのはおすすめしません。
まずログを確認します。
sudo ausearch -m AVC -ts recent
SELinuxによる拒否が発生していないか確認して、必要なポリシーや設定を検討します。
「接続できないからSELinuxを無効化する」という対処だけで終わらせないことが重要です。
6. xrdpのログを確認する
ここまで問題がなければ、ログを確認します。
主に確認するのは、
/var/log/xrdp.log
/var/log/xrdp-sesman.log
です。
例えば、
sudo tail -n 100 /var/log/xrdp.log
sudo tail -n 100 /var/log/xrdp-sesman.log
リアルタイムで確認するなら、
sudo tail -f /var/log/xrdp.log
としてからWindowsから接続すると、接続時に何が起きているのか確認しやすくなります。
systemdのログも確認しておきます。
sudo journalctl -u xrdp
直近だけ確認するなら、
sudo journalctl -u xrdp --since "10 minutes ago"
なども便利です。
7. 「接続できない」と「接続後に黒画面」は分けて考える
xrdpでは、
WindowsからLinuxサーバーそのものに接続できない
場合と、
ログインまではできるが、その後黒い画面になる
場合では調査する場所が違います。
例えば、
Test-NetConnection → False
ならネットワークやFirewallなどを先に調査します。
一方、
Test-NetConnection → True
ログイン画面も表示される
認証後に黒画面
なら、単純な3389/TCPの疎通問題ではありません。
デスクトップ環境、セッション、Xorg、xrdp-sesmanなどを調査する必要があります。
この2つを分けるだけでも、トラブルシューティングがかなり楽になります。
確認する順番
xrdpで接続できないときは、私は次の順番で確認するのがおすすめです。
① systemctl status xrdp
↓
② ss -lntp | grep 3389
↓
③ firewall-cmd
↓
④ Test-NetConnection
↓
⑤ SELinux
↓
⑥ xrdp.log / xrdp-sesman.log
↓
⑦ デスクトップ・セッション関連
上から順番に確認すれば、
サービスなのか
ネットワークなのか
Firewallなのか
認証・セッションなのか
を切り分けやすくなります。
まとめ
CentOS/Rocky Linuxでxrdpに接続できない場合は、最初から設定変更を繰り返すのではなく、一つずつ切り分けていくことが重要です。
特に、
systemctl status xrdp
sudo ss -lntp | grep 3389
sudo firewall-cmd --list-all
sudo tail -n 100 /var/log/xrdp.log
sudo tail -n 100 /var/log/xrdp-sesman.log
Windows側では、
Test-NetConnection LinuxサーバーのIPアドレス -Port 3389
を覚えておくと、障害調査に役立ちます。


コメント