WindowsからLinuxサーバーに接続する場合、SSHを使用することが一般的です。
ただし、GUI(グラフィカルユーザーインターフェース)で操作したい場合や、Linuxのデスクトップ環境をWindowsから遠隔操作したい場合もあります。
このような場合に利用できるのが、xrdpです。
xrdpは、Windows標準のリモートデスクトップ接続(mstsc.exe)からLinuxに接続できるようにするソフトウェアです。
今回は、CentOS Linux 8にxrdpをインストールし、Windowsからリモートデスクトップ接続するまでの手順を紹介します。
また、接続できない場合に確認すべきポイントについても解説します。
注意:CentOS Linux 8は2021年12月31日にサポートが終了しています。
本記事は、既存のCentOS 8環境の保守や検証を目的とした参考情報です。新規構築では、Rocky LinuxやAlmaLinuxなど、サポート中のディストリビューションを使用してください。
サポート終了に伴い、標準リポジトリからのパッケージインストールが失敗する場合があります。本記事のコマンドは、必要なパッケージを取得できる環境を前提としています。
1. 今回の構成
今回の接続構成は以下のとおりです。
| 項目 | 内容 |
|---|---|
| 接続元 | Windows 10 / Windows 11 |
| 接続先 | CentOS Linux 8 |
| リモート接続ソフト | xrdp |
| 接続プロトコル | RDP(Remote Desktop Protocol) |
| 使用ポート | TCP 3389 |
| Linuxデスクトップ | GNOMEなどのGUI環境 |
| 認証 | Linuxのローカルユーザー |
接続イメージ:
Windows PC
│
│ リモートデスクトップ接続(mstsc)
│ TCP 3389
▼
CentOS Linux 8
│
├─ xrdp
├─ xrdp-sesman
└─ GUIデスクトップ環境
Windows側に専用のリモート接続ソフトをインストールする必要はありません。
2. CentOS 8にGUIがインストールされているか確認
最初に、CentOS側のGUI環境を確認します。
systemctl get-default
実行結果の例:
graphical.target
graphical.targetであれば、GUI起動がデフォルトに設定されています。
一方、以下の場合はCUI起動がデフォルトです。
multi-user.target
ただし、graphical.targetであることだけでは、GUI関連パッケージが正常にインストールされているとは断定できません。
必要に応じて、GUI環境を追加します。
dnf groupinstall "Server with GUI"
GUIをデフォルトの起動ターゲットにする場合は、以下を実行します。
systemctl set-default graphical.target
必要に応じて再起動します。
reboot
なお、GUIをインストールするとメモリやディスクの使用量が増加します。
サーバー用途でGUIが必須でなければ、SSHによる管理の方が適している場合もあります。
3. EPELリポジトリを追加
xrdpをインストールするため、EPELリポジトリを追加します。
EPEL(Extra Packages for Enterprise Linux)は、Enterprise Linux系ディストリビューション向けの追加パッケージリポジトリです。
dnf install epel-release -y
リポジトリが登録されているか確認します。
dnf repolist
EPEL関連のリポジトリが表示されることを確認してください。
CentOS 8はサポート終了済みのため、リポジトリの参照先によってはパッケージを取得できないことがあります。
この場合、xrdpの設定以前に、OSのリポジトリ構成を確認する必要があります。
4. xrdpをインストール
xrdpをインストールします。
dnf install xrdp -y
インストールされたパッケージを確認します。
rpm -qa | grep xrdp
続いて、サービスの自動起動と起動を設定します。
systemctl enable --now xrdp
サービスの状態を確認します。
systemctl status xrdp
以下のように表示されれば、サービスは起動しています。
Active: active (running)
ただし、サービスが起動していることと、Windowsから正常にログインできることは別です。
この段階では、xrdpプロセスが起動していることを確認できただけです。
5. TCP 3389の待受状態を確認
次に、xrdpがRDP接続を待ち受けているか確認します。
ss -tlnp | grep 3389
正常な場合の出力例:
LISTEN 0 128 0.0.0.0:3389 0.0.0.0:*
TCP 3389で待ち受けていることが確認できます。
ここで何も表示されない場合は、xrdpのサービス状態や設定ファイルを確認してください。
systemctl status xrdp
journalctl -u xrdp -b --no-pager
xrdpの待受ポートは、通常、以下の設定ファイルで確認できます。
grep '^port=' /etc/xrdp/xrdp.ini
6. firewalldでRDP通信を許可
WindowsからCentOSに接続するためには、TCP 3389への通信を許可する必要があります。
まず、firewalldの状態を確認します。
systemctl status firewalld
firewalldが有効な場合は、RDP用ポートを許可します。
firewall-cmd --permanent --add-port=3389/tcp
設定を反映します。
firewall-cmd --reload
設定を確認します。
firewall-cmd --list-ports
以下が表示されれば、TCP 3389の許可設定が登録されています。
3389/tcp
なお、複数のfirewalldゾーンを使用している場合は、接続元インターフェースに適用されているゾーンを確認してください。
firewall-cmd --get-active-zones
実運用では、接続元IPアドレスを限定することも検討してください。
TCP 3389をインターネットへ直接公開することは推奨しません。 社外から接続する場合は、VPNや踏み台サーバーなどを経由する構成が適切です。
既存環境でfirewalldを停止していた場合
今回の元の検証環境では、以下のコマンドでfirewalldを停止していました。
systemctl disable firewalld
systemctl stop firewalld
ただし、この方法ではRDP以外の通信についてもホスト側ファイアウォールによる制御が失われます。
そのため、新規設定や本番環境では、firewalldを停止するのではなく、必要な通信だけを許可する方法を推奨します。
7. SELinuxの状態を確認
SELinux(Security-Enhanced Linux)は、Linuxのプロセスやファイルへのアクセスを制御するセキュリティ機能です。
まず、現在の状態を確認します。
getenforce
実行結果は以下のいずれかです。
| 状態 | 意味 |
|---|---|
| Enforcing | SELinuxによるアクセス制御を実施 |
| Permissive | 制御違反を記録するが、原則として遮断しない |
| Disabled | SELinuxが無効 |
xrdpを使用するために、必ずSELinuxを無効化する必要があるわけではありません。
まずはEnforcingのまま動作確認することを推奨します。
SELinuxが原因か切り分ける場合
接続できず、SELinuxによる拒否が疑われる場合は、検証目的で一時的にPermissiveへ変更できます。
setenforce 0
状態を確認します。
getenforce
Permissive
この状態で接続できるようになった場合、SELinuxのポリシーやアクセス拒否ログを調査します。
ausearch -m AVC,USER_AVC -ts recent
調査後はEnforcingに戻します。
setenforce 1
SELinuxを恒久的にDisabledにすることは、原則として推奨しません。
元の検証環境ではSELinuxを無効化していましたが、原因の切り分けを行わずに無効化する方法は、本番環境の設定手順として適切ではありません。
8. リモートデスクトップ接続用ユーザーを作成
WindowsからログインするLinuxユーザーを作成します。
useradd testuser
パスワードを設定します。
passwd testuser
ユーザーが作成されたか確認します。
id testuser
ログインには、Linux側のユーザー名とパスワードを使用します。
管理者権限が不要な場合は、一般ユーザーで接続することを推奨します。
9. Windowsからリモートデスクトップ接続
Windows側で、キーボードの「Windowsキー + R」を押します。
以下を入力して実行します。
mstsc
Windows標準の「リモート デスクトップ接続」が起動します。
接続先にCentOSのIPアドレスを入力します。
192.168.x.x
接続すると、xrdpのログイン画面が表示されます。
ユーザー名とパスワードを入力します。
ユーザー名:testuser
パスワード:設定したパスワード
接続に成功すると、Linuxのデスクトップ画面が表示されます。
環境によっては、xrdpのログイン画面で「Xorg」などのセッション方式を選択する必要があります。また、GUIセッションが起動しない場合は、xorgxrdpなどの関連パッケージの有無も確認してください。
10. リモートデスクトップ接続できない場合の確認方法
xrdpで接続できない場合、闇雲に設定を変更するのではなく、通信経路とサービスの状態を順番に確認することが重要です。
① WindowsからTCP 3389へ接続できるか
Windows PowerShellで以下を実行します。
Test-NetConnection 192.168.x.x -Port 3389
正常に接続できる場合の例:
TcpTestSucceeded : True
Falseの場合は、次の項目を確認します。
- CentOS側でxrdpが起動しているか
- TCP 3389で待ち受けているか
- firewalldで通信が許可されているか
- ネットワーク機器や上位ファイアウォールで遮断されていないか
なお、TcpTestSucceeded : TrueはTCP接続が成立したことを示すものであり、RDPの認証やGUIログインの成功を保証するものではありません。
② xrdpサービスが起動しているか
systemctl status xrdp
サービスが停止している場合は、ログを確認します。
journalctl -u xrdp -b --no-pager
必要に応じて、xrdpのセッション管理サービスも確認します。
systemctl status xrdp-sesman
③ xrdpのログを確認
xrdpのログは、一般的に以下の場所に記録されます。
/var/log/xrdp.log
/var/log/xrdp-sesman.log
リアルタイムでログを確認する場合:
tail -f /var/log/xrdp.log
tail -f /var/log/xrdp-sesman.log
認証エラーやセッション起動失敗などの原因を調査する際に役立ちます。
④ 認証後に黒い画面になる場合
Windowsから接続できても、認証後に黒い画面のまま進まない場合があります。
この場合、ネットワーク疎通よりも、GUIセッションの起動処理に問題がある可能性があります。
以下を確認してください。
rpm -qa | grep -E 'xrdp|xorgxrdp'
systemctl status xrdp-sesman
また、GUI環境のインストール状況や、同じユーザーで既存のデスクトップセッションが起動していないかも確認します。
xrdpのログに加え、必要に応じてXorgやユーザーセッション関連のログも調査します。
⑤ 接続直後に切断される場合
接続直後に切断される場合は、認証失敗、セッション起動失敗、GUI環境の不整合などが考えられます。
まずは以下のログを確認します。
tail -n 100 /var/log/xrdp-sesman.log
サービスを再起動して改善するか確認する場合は、接続中のユーザーがいないことを確認した上で実施してください。
systemctl restart xrdp
11. ネットワークSEとして確認しておきたいポイント
リモートデスクトップ接続のトラブルでは、問題が発生している箇所を切り分けることが重要です。
| 確認箇所 | 確認コマンド | 判断できること |
|---|---|---|
| サービス | systemctl status xrdp | xrdpが起動しているか |
| ポート待受 | ss -tlnp | grep 3389 | TCP 3389で待受しているか |
| ホストFW | firewall-cmd --list-all | 対象ゾーンの許可設定 |
| Windowsからの疎通 | Test-NetConnection | TCP接続が成立するか |
| 認証・セッション | xrdp-sesman.log | ログイン処理の問題 |
| SELinux | ausearch | アクセス拒否の有無 |
特に重要なのは、「接続できない」と「接続後にログインできない」を区別することです。
TCP 3389に接続できない場合は、まずネットワークやファイアウォールを確認します。
一方、xrdpのログイン画面まで表示される場合は、認証やデスクトップセッションの問題を優先して調査します。
このように切り分けることで、不要な設定変更を減らせます。
まとめ
CentOS 8にxrdpをインストールすることで、Windows標準のリモートデスクトップ接続からLinuxのGUI環境を操作できます。
今回のポイントは以下のとおりです。
- GUI環境がインストールされているか確認する
- EPELからxrdpをインストールする
- xrdpサービスとTCP 3389の待受を確認する
- firewalldでは必要な通信のみを許可する
- SELinuxは安易に無効化せず、ログから原因を調査する
- 接続できない場合は、通信・認証・GUIセッションを分けて切り分ける
CentOS Linux 8はすでにサポートが終了しているため、新規環境での採用は推奨しません。
既存環境でxrdpを利用する場合も、セキュリティリスクを把握した上で、可能な限りサポート中のOSへの移行を検討してください。



コメント