---
title: "Ubuntu 22.04에서 xrdp와 Xfce로 원격 데스크톱 구성하기"
description: "Ubuntu 22.04 서버에 xrdp와 Xfce를 설치해 Xorg 기반 원격 데스크톱 세션을 구성하고, SSH 터널이나 제한된 방화벽 규칙으로 안전하게 접속하며 세션·성능 문제를 점검하는 방법을 안내한다."
date: "2026-11-04T00:00:00.000Z"
last_modified: "2026-11-04T01:44:34.716Z"
type: "Post"
tags:
  - "ubuntu"
  - "install"
  - "network"
  - "ssh"
  - "troubleshooting"
categories:
  - "📗 Docs"
authors:
  - "봉정근"
canonical_url: "https://pieroot.xyz/ubuntu-xrdp-xfce-setup"
markdown_url: "https://pieroot.xyz/ubuntu-xrdp-xfce-setup.md"
---

# Ubuntu 22.04에서 xrdp와 Xfce로 원격 데스크톱 구성하기

Ubuntu 22.04 서버에 xrdp와 Xfce를 설치해 Xorg 기반 원격 데스크톱 세션을 구성하고, SSH 터널이나 제한된 방화벽 규칙으로 안전하게 접속하며 세션·성능 문제를 점검하는 방법을 안내한다.

Ubuntu 서버를 관리하다 보면 터미널뿐 아니라 그래픽 데스크톱이 필요한 경우가 있다. xrdp를 사용하면 Windows, macOS, Linux의 RDP 클라이언트로 Ubuntu의 별도 데스크톱 세션에 접속할 수 있다.

이 글은 DigitalOcean 튜토리얼을 한국어로 번역·재구성하고, 안전한 접속과 문제 해결을 위해 일부 설명을 보완한 문서다. 서버에서 실제 설치·접속 테스트는 수행하지 않았으므로 적용 전 환경과 패키지 설정을 확인하자.

![원격 PC에서 Ubuntu 서버의 그래픽 세션으로 접속하는 모습을 표현한 이미지. AI로 생성했다.](https://pieroot.xyz/api/image-proxy?id=8496e26e-091f-4054-8a69-b8f6528bc30b&kind=s3&pageId=da0e542a-d99e-4205-97d6-836fdcefacfb&source=block&blockId=4e44c64e-685e-487c-a43c-aeabc593cff8)

> **원문과 라이선스**
> 
> - 원문: [How To Enable Remote Desktop Protocol Using xrdp on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-enable-remote-desktop-protocol-using-xrdp-on-ubuntu-22-04)
> 
> - 원저자: Raghav Aggarwal, Caitlin Postal, Manikandan Kurup, Vinayak Baranwal · 발행: DigitalOcean Community
> 
> - 원문에 표시된 라이선스: [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/). 이 번역·수정본도 동일한 라이선스로 제공한다. 이용 시 저작자 표시, 비상업적 이용, 동일 조건 변경 허락이 필요하다.
> 
> - 변경 사항: 한국어 번역 및 구조 정리, SSH 터널·보안·오류 점검 보완, Wayland와 Xorg 설명 수정. 원문 댓글과 사이트 메뉴는 제외했다.

## 이 글에서 다루는 내용

- xrdp, Xorg, Xfce의 역할과 원격 접속 흐름

- Ubuntu 22.04에서 패키지 설치와 사용자 세션 설정

- SSH 터널 또는 제한된 UFW 규칙으로 접속하기

- 다중 사용자, 성능 최적화와 검은 화면 점검

> **전제 환경**
> 
> - Ubuntu Server 22.04와 sudo 권한을 가진 일반 사용자, SSH 또는 콘솔 복구 경로
> 
> - 메모리 2GB 이상 권장. 사용자 수와 실행할 프로그램에 따라 더 필요할 수 있다.
> 
> - Windows의 원격 데스크톱 연결, macOS의 Windows App, Linux의 Remmina 등 RDP 클라이언트
> 
> - 예시 계정 `sammy`, 서버 주소 `server.example.com`, 접속 허용 IP `203.0.113.10`은 실제 값으로 교체한다.
> 
> - 별도 표시가 없으면 서버에서 RDP로 접속할 일반 사용자로 실행한다. SSH 터널 명령은 로컬 PC에서 실행한다.

## xrdp는 어떻게 동작할까?

xrdp는 RDP 연결을 받고, xrdp-sesman은 인증과 세션 생성을 담당한다. 이 글에서는 **xorgxrdp와 Xorg로 별도의 가상 Xfce 세션**을 실행한다. 기존 모니터에 표시된 데스크톱을 그대로 공유하는 구성과는 다르다.

아래 HTML 시각화는 로컬 클라이언트에서 서버의 가상 Xfce 세션까지 이어지는 경로를 보여준다.

[https://prod-files-secure.s3.us-west-2.amazonaws.com/da63dd0f-9bae-4c9d-a318-bd0705ed73e2/a1a1560a-077c-42ce-ad64-2588359bbce0/xrdp-connection.html?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4666NLIRJGL%2F20261104%2Fus-west-2%2Fs3%2Faws4\_request&X-Amz-Date=20261104T014433Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjENf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQD7knCwsvKyTbcqNOufK1tBw5GJ4%2Ba7cZFDNjPNTPQzXQIhAMC1xe3ooLnRFGpgQbWnntChjZUOAtnGgZQ19%2B%2Fj8S5%2BKogECKD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgzrdsVc6OP0LXzAIgcq3APF77ar4SfmRTGdOOVok4Ryku7eel%2FF4olro%2FCfllWYl5KqWwFvuhZW4q86JWyar%2FLJ0A20XVQc9%2Bso8pXv%2BGS0XxurKaaeAfxFa6sVEeTNYyglRQhKGny3c6%2FbIX3aL%2BonKqftQT3bLf6%2BTunCLr1jNrgnUfk9iILinjcwQiKw8itD%2FtwzNCChGg38qCArqHbjC1R3pgqRkgsickCxEey0Nl4nTTRgEoP3tjZZx5AEdqz6SDKpR7IpSidWNdp8%2BxMo91cAVvi3mey%2F4LJwe%2BpcnVN9bvJxWnqsoZwfguv%2FT3nYOLIpYpLKVgItFaS4q8DWEyrW%2Fw2QOk%2BuzlQ1uDnTakcZw04mjXaJT%2FpHbdJH19BxqY4CRgy%2ByfAaJMWO07c8subQNwC0shBI7vkiZFKM0wDCnwTkYCiBBlngYXgZ0pbu53SD2bRjwUQ04s8%2FUrYgUO4Ct9GFYHwehIRgfamotiyl2gvdNlx98t9Tk26r89IQvmDAYMSzghDDiK%2BWM2NiW4sObPjPgo5vujB%2F56tY7zwvs4Jawp7popyPdkUgdB0%2BRnsKdaTyo7LLGiQwO%2Fjdt4Ds0TTPAYPXH%2FG3ab74s1cEgKD9w9c8dyavok0lSkLRXhOR3AMlaeE%2BSTDF0KnXBjqkAcu9moLkHJcJSWo9AaYE9xh3ro0wvQy4664h8hS6xxnHDEYfMBRPR6Zj0nE3OFr4eiThbK%2FDg96vT3vVMJQKQstPk1zA3Q3nnvjHrdjxr4j4rDm2WUAK1%2FUU21IJOGdux4OlqGsxIpbNDwFtolmiebKsHg7xSRD4yihD8%2Fdh3EQWtFymWzPWhw6khDlLXJHaCY54ycGe6j2R2k%2B5X9Osl9izhGSo&X-Amz-Signature=e8314d7f99df08bdf97bb1c8f61180630eee36c71c053312ffc80a07f74bcb25&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject](https://prod-files-secure.s3.us-west-2.amazonaws.com/da63dd0f-9bae-4c9d-a318-bd0705ed73e2/a1a1560a-077c-42ce-ad64-2588359bbce0/xrdp-connection.html?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4666NLIRJGL%2F20261104%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261104T014433Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjENf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQD7knCwsvKyTbcqNOufK1tBw5GJ4%2Ba7cZFDNjPNTPQzXQIhAMC1xe3ooLnRFGpgQbWnntChjZUOAtnGgZQ19%2B%2Fj8S5%2BKogECKD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgzrdsVc6OP0LXzAIgcq3APF77ar4SfmRTGdOOVok4Ryku7eel%2FF4olro%2FCfllWYl5KqWwFvuhZW4q86JWyar%2FLJ0A20XVQc9%2Bso8pXv%2BGS0XxurKaaeAfxFa6sVEeTNYyglRQhKGny3c6%2FbIX3aL%2BonKqftQT3bLf6%2BTunCLr1jNrgnUfk9iILinjcwQiKw8itD%2FtwzNCChGg38qCArqHbjC1R3pgqRkgsickCxEey0Nl4nTTRgEoP3tjZZx5AEdqz6SDKpR7IpSidWNdp8%2BxMo91cAVvi3mey%2F4LJwe%2BpcnVN9bvJxWnqsoZwfguv%2FT3nYOLIpYpLKVgItFaS4q8DWEyrW%2Fw2QOk%2BuzlQ1uDnTakcZw04mjXaJT%2FpHbdJH19BxqY4CRgy%2ByfAaJMWO07c8subQNwC0shBI7vkiZFKM0wDCnwTkYCiBBlngYXgZ0pbu53SD2bRjwUQ04s8%2FUrYgUO4Ct9GFYHwehIRgfamotiyl2gvdNlx98t9Tk26r89IQvmDAYMSzghDDiK%2BWM2NiW4sObPjPgo5vujB%2F56tY7zwvs4Jawp7popyPdkUgdB0%2BRnsKdaTyo7LLGiQwO%2Fjdt4Ds0TTPAYPXH%2FG3ab74s1cEgKD9w9c8dyavok0lSkLRXhOR3AMlaeE%2BSTDF0KnXBjqkAcu9moLkHJcJSWo9AaYE9xh3ro0wvQy4664h8hS6xxnHDEYfMBRPR6Zj0nE3OFr4eiThbK%2FDg96vT3vVMJQKQstPk1zA3Q3nnvjHrdjxr4j4rDm2WUAK1%2FUU21IJOGdux4OlqGsxIpbNDwFtolmiebKsHg7xSRD4yihD8%2Fdh3EQWtFymWzPWhw6khDlLXJHaCY54ycGe6j2R2k%2B5X9Osl9izhGSo&X-Amz-Signature=e8314d7f99df08bdf97bb1c8f61180630eee36c71c053312ffc80a07f74bcb25&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

SSH 터널을 사용하면 로컬 포트로 들어온 RDP 트래픽이 SSH 연결을 거쳐 서버의 xrdp로 전달된다. RDP도 TLS를 사용할 수 있지만, 인터넷에 3389를 공개하는 대신 VPN이나 SSH 터널을 우선 검토하자.

## 1. Xfce와 xrdp 설치

**서버에서 실행한다.** 패키지 인덱스를 갱신하고 설치 목록을 확인한다.

```bash
sudo apt update
sudo apt install xfce4 xfce4-goodies xrdp xorgxrdp
```

`xorgxrdp`는 xrdp의 Xorg 세션에 필요한 모듈이다. 설치 과정에서 display manager 선택 화면이 나타날 수 있지만, 로컬 로그인 화면을 담당하는 display manager와 xrdp가 만드는 가상 세션은 별개다. 기존 데스크톱이 있는 서버에서는 선택을 바꾸기 전에 영향을 확인한다. 패키지를 찾지 못하면 Universe 저장소와 `apt update` 결과를 확인한다.

설치와 서비스를 확인한다.

```bash
dpkg -l xrdp xorgxrdp xfce4
sudo systemctl enable --now xrdp
sudo systemctl status xrdp --no-pager
sudo systemctl status xrdp-sesman --no-pager
sudo ss -ltnp | grep ':3389'
```

`active (running)`인지 확인한다. `ss`에는 리스닝 주소도 표시된다. `0.0.0.0:3389` 또는 `[::]:3389`라면 모든 인터페이스에서 연결을 받을 수 있으므로 뒤의 방화벽 항목을 확인하자.

## 2. 사용자별 Xfce 세션 설정

xrdp로 로그인할 **일반 사용자 계정**에서 실행한다. 기존 `~/.xsession`이 있으면 먼저 백업한다.

```bash
[ ! -e "$HOME/.xsession" ] || cp -a "$HOME/.xsession" "$HOME/.xsession.bak"
printf '%s\n' 'xfce4-session' > "$HOME/.xsession"
chmod 644 "$HOME/.xsession"
cat "$HOME/.xsession"
```

Ubuntu의 Xsession 설정에서 사용자별 `.xsession`을 읽는 일반적인 구성에 맞춘 예시다. 환경이나 기존 세션 설정에 따라 자동 선택될 수도 있으므로, 파일이 없으면 반드시 실패한다고 단정할 수는 없다. 세션이 시작되지 않으면 아래 로그와 `/etc/xrdp/startwm.sh`, `/etc/X11/Xsession` 설정을 함께 확인한다.

`/etc/xrdp/xrdp.ini`의 `[Xorg]` 설정은 기본값을 그대로 사용하는 것으로 시작한다. 접속 화면에서 **Xorg** 세션을 선택하고 Linux 사용자 이름과 비밀번호를 입력한다. 비밀번호를 설정 파일에 저장할 필요는 없다.

## 3. 안전한 접속 경로 선택

### 방법 A: SSH 터널 사용 — 권장

SSH가 이미 안전하게 허용되어 있다면 RDP 포트를 외부에 새로 열지 않고 접근할 수 있다. **로컬 PC의 터미널 또는 PowerShell**에서 실행한다.

```bash
ssh -L 127.0.0.1:13389:127.0.0.1:3389 -N -o ExitOnForwardFailure=yes sammy@server.example.com
```

- 로컬 `127.0.0.1:13389`가 터널 입구이고, 서버의 `127.0.0.1:3389`가 xrdp 목적지다.

- SSH 서버의 TCP forwarding이 허용되어 있어야 한다. 로컬 포트가 사용 중이면 `13389`를 다른 번호로 바꾼다.

- SSH 서버 호스트 키의 fingerprint는 신뢰할 수 있는 별도 경로로 확인한다.

- 터널을 유지한 채 RDP 클라이언트에서 `localhost:13389`에 연결한다. 터미널에서 `Ctrl+C`를 누르면 터널이 종료된다.

**주의:** SSH 터널을 만든다고 서버의 xrdp 리스닝 주소나 기존 방화벽 규칙이 자동으로 바뀌지는 않는다. 서버의 `ss` 출력과 UFW·클라우드 방화벽을 확인해 불필요한 외부 3389 접근이 허용되지 않았는지 별도로 점검한다. SSH 포트 포워딩을 막는 정책이나 SSH 서비스 중단 시에도 접속이 불가능하므로 기존 콘솔 복구 경로를 유지하자.

### 방법 B: 특정 IP에서만 직접 접속

VPN 또는 SSH 터널을 사용할 수 없을 때는 신뢰할 수 있는 출발지 IP로 TCP 3389를 제한한다. `203.0.113.10`은 설명용 IPv4 주소이므로 실제 클라이언트의 공인 IP나 VPN 대역으로 바꾼다.

```bash
# 서버: 기존 정책과 SSH 허용 상태부터 확인
sudo ufw status numbered
sudo ufw allow from 203.0.113.10/32 to any port 3389 proto tcp
sudo ufw status numbered
```

UFW가 비활성 상태라면 규칙을 추가해도 강제되지 않는다. `ufw enable`은 원격 SSH 연결을 끊을 수 있으므로 먼저 **실제 SSH 포트 허용 규칙**과 콘솔 접근을 확인한 뒤 신중히 활성화한다. 클라우드 보안 그룹·외부 방화벽에도 동일한 제한이 필요하다. IPv6은 별도 정책을 확인하고 필요하지 않으면 외부에서 접근되지 않도록 한다. 유동 IP라면 허용 주소가 바뀔 수 있다.

추가한 규칙을 되돌릴 때는 `sudo ufw status numbered`의 현재 번호를 확인하고 해당 규칙만 `sudo ufw delete 번호`로 삭제한다. 번호는 삭제할 때마다 바뀔 수 있다.

## 4. 운영체제별 접속과 검증

1. **Windows:** 원격 데스크톱 연결을 열고 `localhost:13389`를 입력한다. 직접 접속이라면 서버 IP를 입력한다.

1. **macOS:** Windows App 등 RDP 클라이언트에서 PC를 추가하고 같은 주소를 입력한다. 앱 버전에 따라 메뉴 이름이 다를 수 있다.

1. **Linux:** Remmina에서 RDP 연결을 만들고 같은 주소를 입력한다. Ubuntu라면 `sudo apt install remmina`로 설치할 수 있다.

1. xrdp 로그인 화면에서 **Xorg**를 선택하고 서버의 일반 사용자 계정으로 로그인한다.

1. Xfce 바탕화면과 터미널이 열리는지 확인한다. RDP 클라이언트를 닫는 것은 로그아웃과 다르며 서버 세션이 남아 있을 수 있다.

인증서 경고가 표시된다면 무조건 수락하지 말고 서버에서 사용하는 인증서의 fingerprint를 신뢰할 수 있는 별도 경로로 확인하자. 자체 서명 인증서는 자동으로 신원을 보증하지 않는다.

```bash
# 서버: 실제 인증서 설정 및 fingerprint 확인
sudo grep -E '^(certificate|key_file|security_layer)=' /etc/xrdp/xrdp.ini
sudo openssl x509 -in /etc/xrdp/cert.pem -noout -fingerprint -sha256
```

인증서 경로가 기본값과 다르면 실제 설정된 파일을 지정한다. 운영 환경에서는 신뢰 가능한 인증서와 접근 제어를 함께 적용한다.

## 5. 여러 사용자와 동시 세션

사용자마다 별도 Linux 계정을 사용하는 것이 기본이다. 예를 들어 새 사용자를 만들고 해당 계정으로 세션 파일을 구성한다.

```bash
# 서버 관리자
sudo adduser alice
sudo -iu alice
# alice 계정에서 실행
[ ! -e "$HOME/.xsession" ] || cp -a "$HOME/.xsession" "$HOME/.xsession.bak"
printf '%s\n' 'xfce4-session' > "$HOME/.xsession"
chmod 644 "$HOME/.xsession"
exit
```

`.xsession`의 소유자와 홈 디렉터리 접근 권한을 확인하되, 문제 해결을 위해 모든 사용자의 홈을 일괄적으로 `755`로 바꿀 필요는 없다. 이는 홈 디렉터리의 개인정보 노출 범위를 넓힐 수 있다.

```bash
id alice
ls -ld /home/alice
ls -l /home/alice/.xsession
loginctl list-sessions
sudo grep -n -E '^\[Sessions\]|^MaxSessions' /etc/xrdp/sesman.ini
```

동시 세션 수는 설치된 `/etc/xrdp/sesman.ini`의 `[Sessions]` 설정과 시스템 자원에 따라 달라진다. 변경이 필요하면 파일을 백업한 후 실제 버전의 `man sesman.ini`를 확인하자. 서비스를 재시작하면 연결 중인 사용자에게 영향이 있을 수 있으므로 작업을 저장하고 유지보수 시간을 잡는다.

## 6. 느린 연결에서 성능 개선

- **Xfce 사용:** 데스크톱 환경과 실행 프로그램의 CPU·메모리 사용량을 줄인다.

- **화면 설정 조정:** 클라이언트에서 해상도를 낮추고 지원된다면 색상 깊이도 조절한다. 화질과 반응성을 비교해 선택하자.

- **효과 끄기:** Xfce의 Settings → Window Manager Tweaks → Compositor에서 합성 효과를 끄거나 바탕화면 이미지를 단순하게 바꾼다.

- **클라이언트 옵션 확인:** 압축과 캐싱 기능의 지원 여부 및 메뉴는 앱·버전에 따라 다르다. 변경 전후 지연과 CPU 사용량을 비교한다.

## 7. Wayland와 Xorg: 무엇을 바꿔야 할까?

이 글의 xrdp 경로는 **xorgxrdp 기반의 별도 Xorg 세션**이다. 기존 GNOME 콘솔이 Wayland를 사용하더라도, 별도의 xrdp Xorg 세션을 만들기 위해 GDM의 Wayland를 무조건 끌 필요는 없다. 검은 화면이 나타나면 먼저 xorgxrdp, 사용자 세션과 로그를 확인한다.

기존 **로컬 GDM 로그인 자체를 Xorg로 바꿔야 하는 별도 요구**가 있는 경우에만 `/etc/gdm3/custom.conf`의 `[daemon]`에 `WaylandEnable=false`를 검토한다. 변경 전 파일을 백업하고 콘솔 접근 경로와 유지보수 시간을 확보하자. GDM 재시작이나 재부팅은 로컬 GUI 세션을 종료할 수 있다. 롤백은 백업 파일을 복원한 뒤 유지보수 시간에 다시 적용한다.

## 문제 해결: 어디부터 확인할까?

아래 HTML 점검 도구에서 증상을 선택하면 우선 확인할 항목과 명령을 볼 수 있다. 표시되지 않더라도 아래 설명과 명령으로 점검할 수 있다.

[https://prod-files-secure.s3.us-west-2.amazonaws.com/da63dd0f-9bae-4c9d-a318-bd0705ed73e2/1b2f7817-ddd7-4ae3-be89-6eddb0f38c47/xrdp-diagnostics.html?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4666NLIRJGL%2F20261104%2Fus-west-2%2Fs3%2Faws4\_request&X-Amz-Date=20261104T014433Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjENf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQD7knCwsvKyTbcqNOufK1tBw5GJ4%2Ba7cZFDNjPNTPQzXQIhAMC1xe3ooLnRFGpgQbWnntChjZUOAtnGgZQ19%2B%2Fj8S5%2BKogECKD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgzrdsVc6OP0LXzAIgcq3APF77ar4SfmRTGdOOVok4Ryku7eel%2FF4olro%2FCfllWYl5KqWwFvuhZW4q86JWyar%2FLJ0A20XVQc9%2Bso8pXv%2BGS0XxurKaaeAfxFa6sVEeTNYyglRQhKGny3c6%2FbIX3aL%2BonKqftQT3bLf6%2BTunCLr1jNrgnUfk9iILinjcwQiKw8itD%2FtwzNCChGg38qCArqHbjC1R3pgqRkgsickCxEey0Nl4nTTRgEoP3tjZZx5AEdqz6SDKpR7IpSidWNdp8%2BxMo91cAVvi3mey%2F4LJwe%2BpcnVN9bvJxWnqsoZwfguv%2FT3nYOLIpYpLKVgItFaS4q8DWEyrW%2Fw2QOk%2BuzlQ1uDnTakcZw04mjXaJT%2FpHbdJH19BxqY4CRgy%2ByfAaJMWO07c8subQNwC0shBI7vkiZFKM0wDCnwTkYCiBBlngYXgZ0pbu53SD2bRjwUQ04s8%2FUrYgUO4Ct9GFYHwehIRgfamotiyl2gvdNlx98t9Tk26r89IQvmDAYMSzghDDiK%2BWM2NiW4sObPjPgo5vujB%2F56tY7zwvs4Jawp7popyPdkUgdB0%2BRnsKdaTyo7LLGiQwO%2Fjdt4Ds0TTPAYPXH%2FG3ab74s1cEgKD9w9c8dyavok0lSkLRXhOR3AMlaeE%2BSTDF0KnXBjqkAcu9moLkHJcJSWo9AaYE9xh3ro0wvQy4664h8hS6xxnHDEYfMBRPR6Zj0nE3OFr4eiThbK%2FDg96vT3vVMJQKQstPk1zA3Q3nnvjHrdjxr4j4rDm2WUAK1%2FUU21IJOGdux4OlqGsxIpbNDwFtolmiebKsHg7xSRD4yihD8%2Fdh3EQWtFymWzPWhw6khDlLXJHaCY54ycGe6j2R2k%2B5X9Osl9izhGSo&X-Amz-Signature=1252548d5e93208b1476485b4cb505f8fd5f6208edbd7c4073c67ee623acfb9a&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject](https://prod-files-secure.s3.us-west-2.amazonaws.com/da63dd0f-9bae-4c9d-a318-bd0705ed73e2/1b2f7817-ddd7-4ae3-be89-6eddb0f38c47/xrdp-diagnostics.html?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4666NLIRJGL%2F20261104%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261104T014433Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjENf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQD7knCwsvKyTbcqNOufK1tBw5GJ4%2Ba7cZFDNjPNTPQzXQIhAMC1xe3ooLnRFGpgQbWnntChjZUOAtnGgZQ19%2B%2Fj8S5%2BKogECKD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgzrdsVc6OP0LXzAIgcq3APF77ar4SfmRTGdOOVok4Ryku7eel%2FF4olro%2FCfllWYl5KqWwFvuhZW4q86JWyar%2FLJ0A20XVQc9%2Bso8pXv%2BGS0XxurKaaeAfxFa6sVEeTNYyglRQhKGny3c6%2FbIX3aL%2BonKqftQT3bLf6%2BTunCLr1jNrgnUfk9iILinjcwQiKw8itD%2FtwzNCChGg38qCArqHbjC1R3pgqRkgsickCxEey0Nl4nTTRgEoP3tjZZx5AEdqz6SDKpR7IpSidWNdp8%2BxMo91cAVvi3mey%2F4LJwe%2BpcnVN9bvJxWnqsoZwfguv%2FT3nYOLIpYpLKVgItFaS4q8DWEyrW%2Fw2QOk%2BuzlQ1uDnTakcZw04mjXaJT%2FpHbdJH19BxqY4CRgy%2ByfAaJMWO07c8subQNwC0shBI7vkiZFKM0wDCnwTkYCiBBlngYXgZ0pbu53SD2bRjwUQ04s8%2FUrYgUO4Ct9GFYHwehIRgfamotiyl2gvdNlx98t9Tk26r89IQvmDAYMSzghDDiK%2BWM2NiW4sObPjPgo5vujB%2F56tY7zwvs4Jawp7popyPdkUgdB0%2BRnsKdaTyo7LLGiQwO%2Fjdt4Ds0TTPAYPXH%2FG3ab74s1cEgKD9w9c8dyavok0lSkLRXhOR3AMlaeE%2BSTDF0KnXBjqkAcu9moLkHJcJSWo9AaYE9xh3ro0wvQy4664h8hS6xxnHDEYfMBRPR6Zj0nE3OFr4eiThbK%2FDg96vT3vVMJQKQstPk1zA3Q3nnvjHrdjxr4j4rDm2WUAK1%2FUU21IJOGdux4OlqGsxIpbNDwFtolmiebKsHg7xSRD4yihD8%2Fdh3EQWtFymWzPWhw6khDlLXJHaCY54ycGe6j2R2k%2B5X9Osl9izhGSo&X-Amz-Signature=1252548d5e93208b1476485b4cb505f8fd5f6208edbd7c4073c67ee623acfb9a&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

우선순위는 **서비스 → 리스닝 주소 → 네트워크 경로 → 인증 → Xorg·데스크톱 세션**이다.

```bash
# 서버
sudo systemctl status xrdp xrdp-sesman --no-pager
sudo ss -ltnp | grep ':3389'
sudo journalctl -u xrdp -u xrdp-sesman -n 100 --no-pager
sudo tail -n 100 /var/log/xrdp.log /var/log/xrdp-sesman.log
# 접속하는 일반 사용자
ls -l ~/.xsession
cat ~/.xsession
ls -la ~/.xorgxrdp.*.log ~/.xsession-errors 2>/dev/null
```

- **연결 거부·시간 초과:** 서비스가 리스닝 중인지, 클라이언트가 터널의 `localhost:13389` 또는 올바른 서버 주소를 사용하는지 확인한다. 직접 연결이면 UFW, 클라우드 방화벽과 출발지 IP를 확인한다.

- **인증 실패:** 서버의 사용자 이름과 비밀번호, 계정 잠금·만료 여부와 sesman 로그를 확인한다. `.xsession` 오류는 일반적으로 인증 이후 세션 시작 문제이므로 둘을 구분한다.

- **검은 화면·로그인 직후 종료:** Xorg 세션을 선택했는지, `xorgxrdp`와 Xfce가 설치됐는지, 해당 사용자의 `.xsession` 소유자와 내용을 확인한다. `~/.xsession-errors`와 실제 생성된 Xorg 로그에 표시된 오류를 우선 추적한다.

- **TLS 인증서 또는 키 접근 오류:** `xrdp.log`와 설정된 인증서 경로·파일 권한을 확인한다. `xrdp`의 `ssl-cert` 그룹 추가는 설치 상태와 오류를 확인한 후 필요한 경우에만 검토한다. 그룹 변경 후 서비스 재시작은 연결에 영향을 줄 수 있다.

- **원하는 기존 화면이 보이지 않음:** 이 구성은 기본적으로 별도의 가상 세션이다. 물리 콘솔 공유가 목적이라면 해당 환경에 맞는 화면 공유 방식이 필요하다.

## 다른 원격 데스크톱 도구와 비교

| 도구 | 주로 적합한 경우 | 확인할 점 |
| --- | --- | --- |
| xrdp | 기존 RDP 클라이언트로 Linux 가상 세션 접속 | Xorg 세션 설정, 접근 제어와 TLS 확인 |
| VNC | 구현체에 따라 가상 세션 또는 기존 화면 공유 | 구현체별 암호화·인증이 다르므로 SSH 터널 등 검토 |
| TeamViewer | 원격 지원 및 관리형 접속 | 기능과 라이선스, 계정 정책 확인 |
| NoMachine | 원격 데스크톱 및 멀티미디어 사용 | 배포판 호환성, 기능과 라이선스 확인 |

성능이나 동시 사용자 지원은 제품 버전과 환경에 따라 달라진다. xrdp의 클립보드·드라이브 리디렉션 등은 클라이언트와 서버 설정 및 지원 여부에 따라 사용할 수 있다.

## 핵심 정리와 체크리스트

- [ ] `xrdp`, `xorgxrdp`, Xfce 설치와 서비스 상태를 확인했다.

- [ ] 일반 사용자별 세션 설정과 계정 권한을 확인했다.

- [ ] SSH 터널 또는 VPN을 우선 사용하고 불필요한 외부 3389 접근을 막았다.

- [ ] UFW뿐 아니라 클라우드 방화벽과 IPv6 규칙도 확인했다.

- [ ] 서버 인증서 fingerprint를 검증하고 강력한 계정 인증을 사용한다.

- [ ] 검은 화면에서는 먼저 xrdp-sesman·Xorg·Xfce 로그를 확인한다.

- [ ] 기존 GDM 설정과 서비스 재시작은 영향 및 롤백 경로를 확인한 뒤 수행한다.

## 참고 자료

- [DigitalOcean 원문: How To Enable Remote Desktop Protocol Using xrdp on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-enable-remote-desktop-protocol-using-xrdp-on-ubuntu-22-04)

- [xrdp 공식 프로젝트](https://github.com/neutrinolabs/xrdp)

- [Ubuntu 22.04 xrdp 패키지](https://packages.ubuntu.com/jammy/xrdp)

- [Microsoft: Remote Desktop Protocol 개요](https://learn.microsoft.com/en-us/troubleshoot/windows-server/remote/understanding-remote-desktop-protocol)

- [Xfce 공식 사이트](https://www.xfce.org/)

- [CC BY-NC-SA 4.0 라이선스](https://creativecommons.org/licenses/by-nc-sa/4.0/)
